home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 701-725 / 724 / xsearch / source.lha / English / XSearch.p
Text File  |  1992-08-15  |  268KB  |  4,621 lines

  1. PROGRAM XSearch;
  2.  
  3. {$incl "exec.lib"}
  4. {$incl "intuition.lib","intuition/gadgetclass.h"}
  5. {$incl "graphics.lib"}
  6. {$incl "gadtools.lib"}
  7. {$incl "diskfont.lib"}
  8. {$incl "dos.lib"}
  9. {$incl "utility.lib"}
  10. {$incl "asl.lib"}
  11. {$incl "wb.lib"}
  12. {$incl "iffparse.lib"}
  13.  
  14. CONST   LF = chr($A);
  15.         Reverse = chr($7F);
  16.         CM_OPTIONS = FALSE;
  17.         CM_FILER = TRUE;
  18. {IFF}   ID_CHRS = $43485253;
  19.         ID_FTXT = $46545854;
  20.  
  21. TYPE    DateTimeFormat = RECORD
  22.                 DH,MM,YS:integer
  23.         END;
  24.         p_Prefs = ^Prefs;
  25.         Prefs = RECORD
  26.                 Bigger,Smaller:long
  27.                 Bits:string[9];
  28.                 Date1,Time1,Date2,Time2:string[11];
  29.                 DateFormat:integer
  30.                 Pattern,Comment,Typ,FileIn:string[257];
  31.                 Bool:long;
  32.                 BoolComment,BoolFileIn:short
  33.         end;
  34.         p_OptimizedPrefs = ^OptimizedPrefs;
  35.         OptimizedPrefs = RECORD
  36.                 Bigger,Smaller:long
  37.                 DoLength:boolean
  38.                 Bits,BitsMask:long
  39.                 Date1,Date2:DateStamp
  40.                 DoDate:boolean
  41.                 PreName,PreComment,PreIn:string[769];
  42.                 PreIFF:string[257];
  43.                 Switches:long;
  44.                 CaseComment,CaseFileIn:boolean
  45.                 NumIFF:integer
  46.         end;
  47.         p_XSearchPrefs = ^XSearchPrefs;
  48.         XSearchPrefs = RECORD
  49.                 FilerStart:boolean;
  50.                 StartDir,ProjektDir:String[256]
  51.                 Recursion,Sensitivity,Coloured:boolean
  52.                 DateFormat:integer
  53.                 Currency:boolean
  54.                 DirLength,DirIFF,DirFile,DirOther:boolean
  55.         END;
  56.         FileString = String[112];
  57.         DirString = String[256];
  58.         DirNameString = String[364];
  59.         ExchangeString = String[11];
  60.         p_StringNode = ^StringNode;
  61.         StringNode = RECORD
  62.                 stn_Node: Node
  63.                 stn_String: FileString
  64.         END;
  65.         p_SearchNode = ^SearchNode;
  66.         SearchNode = RECORD
  67.                 sen_Node: Node
  68.                 sen_String: FileString
  69.                 sen_Path: DirString
  70.         END;
  71.         p_AnchorNode = ^AnchorNode;
  72.         AnchorNode = RECORD
  73.                 ano_Node: Node
  74.                 ano_Anchor: p_AnchorPath
  75.                 ano_Lock: BPTR
  76.         END;
  77.  
  78. VAR     myop    :                               Prefs;
  79.         EndExit :                               integer;
  80.         scr     :                               p_screen;
  81.         VI      :                               ptr;
  82.         DI      :                               p_DrawInfo;
  83.         tattr   :                               TextAttr;
  84.         tfont   :                               p_TextFont;
  85.         PrefsStandard,PCA:                      Prefs;
  86.         PCA_Optimized:                          OptimizedPrefs;
  87.         VariableString:                         string[364];
  88.         VariableStr:                            str;
  89.         FileInfo:                               p_FileInfoBlock;
  90.         ProjektName:                            string[108];
  91.         ProjektDir:                             string[257];
  92.         Projekt :                               string[364];
  93.         ProjektXSearch:                         string[120];
  94.         SearchList:                             p_List;
  95.         SearchNodeV,SearchNodeBack:             p_SearchNode;
  96.         TextNode,TextNodeBack:                  p_StringNode;
  97.         TextList:                               p_List;
  98.         MyPattern,CurrentDirectory,VS,CS:       DirString;
  99.         MyLock  :                               BPTR;
  100.         LockBack:                               BPTR;
  101.         LockFirst:                              BPTR;
  102.         DB      :                               p_DosLibrary;
  103.         CurrentMode:                            Boolean;
  104.         saved   :                               Boolean;
  105.         start   :                               Boolean;
  106.         inSearch:                               Boolean;
  107.         UsedXSP :                               XSearchPrefs;
  108.         BeginString:                            String;
  109.         IDidTheMarking:                         boolean;
  110.  
  111.  
  112. PROCEDURE PrepareNode(VAR TestNode:ptr,Text:Str);
  113. VAR     TextNode:                               p_StringNode;
  114. BEGIN
  115.         TextNode:=TestNode;
  116.         TextNode^.stn_Node.ln_Succ:=NIL;
  117.         TextNode^.stn_Node.ln_Pred:=NIL;
  118.         TextNode^.stn_Node.ln_Type:=NT_UNKNOWN;
  119.         TextNode^.stn_String:=Text;
  120.         TextNode^.stn_Node.ln_Name:=TextNode^.stn_String;
  121. END;
  122.  
  123. FUNCTION UpperString(upstr:str):FileString;
  124. VAR     i       :                               integer;
  125.         VariableString:                         FileString;
  126. BEGIN
  127.         VariableString:=upstr;
  128.         for i:=1 to length(VariableString) do
  129.                 VariableString[i]:=upcase(VariableString[i]);
  130.         UpperString:=VariableString
  131. END;
  132.  
  133. PROCEDURE SortInDirList(VAR TextList:p_List,TextNode:p_node,offset:integer);
  134. LABEL   ExitOut;
  135. VAR     before  :                               Node;
  136.         VariableString,V2:                      FileString;
  137. BEGIN
  138.         VariableString:=copy(TextNode^.ln_Name,offset,length(TextNode^.ln_Name)-offset+1);
  139.         VariableString:=UpperString(VariableString);
  140.         if TextList^.lh_head=Ptr(Long(TextList)+4) then begin AddHead(TextList,TextNode); goto ExitOut end;
  141.         before:=TextList^.lh_Head^;
  142.         if TextNode^.ln_Pri=1 then begin
  143.                 V2:=copy(before.ln_Name,offset,length(before.ln_Name)-offset+1);
  144.                 V2:=UpperString(V2);
  145.                 if VariableString<=V2 then begin AddHead(TextList,TextNode); goto ExitOut end
  146.         end else begin
  147.                 while NOT ((before.ln_Pri=0) or (before.ln_succ=TextList^.lh_Tail)) do
  148.                         before:=before.ln_Succ^;
  149.                 V2:=copy(before.ln_Name,offset,length(before.ln_Name)-offset+1);
  150.                 V2:=UpperString(V2);
  151.                 if VariableString<=V2 then begin
  152.                         if TextNode^.ln_Pred=TextList^.lh_Head then AddHead(TextList,TextNode) else Insert(TextList,TextNode,before.ln_pred);
  153.                         goto ExitOut
  154.                 end
  155.         end;
  156.         while NOT (((TextNode^.ln_Pri=1) and (before.ln_Pri=0)) or (before.ln_succ=TextList^.lh_Tail) or (VariableString<=V2)) do begin
  157.                 before:=before.ln_Succ^;
  158.                 V2:=copy(before.ln_Name,offset,length(before.ln_Name)-offset+1);
  159.                 V2:=UpperString(V2)
  160.         end;
  161.         Insert(TextList,TextNode,before.ln_pred);
  162.         ExitOut:
  163. END;
  164.  
  165. PROCEDURE InitList(TestList:p_List);
  166. BEGIN
  167.         WITH TestList^ DO BEGIN
  168.                 lh_tail:=NIL;
  169.                 lh_TailPred:=Ptr(TestList);
  170.                 lh_head:=Ptr(Long(TestList)+4)
  171.         END
  172. END;
  173.  
  174. FUNCTION CreatePort(name:Str,pri:Byte):p_MsgPort;
  175. VAR     port    :                               p_MsgPort;
  176.         sigbit  :                               Byte;
  177. BEGIN
  178.         port:=ptr(Alloc_Mem(SizeOf(MsgPort),MEMF_CLEAR or MEMF_PUBLIC));
  179.         sigbit:=AllocSignal(-1);
  180.         with port^, mp_Node do begin
  181.                 ln_Name:=name;
  182.                 ln_Pri:=pri;
  183.                 ln_Type:=NT_MSGPORT;
  184.                 mp_Flags:=PA_SIGNAL;
  185.                 mp_SigBit:=sigbit;
  186.                 mp_SigTask:=FindTask(NIL);
  187.                 AddPort(port)
  188.         end;
  189.         CreatePort:=port
  190. END;
  191.  
  192. PROCEDURE DeletePort(port:p_MsgPort);
  193. BEGIN
  194.         RemPort (port);
  195.         FreeSignal(port^.mp_SigBit);
  196.         Free_Mem (Long(port), SizeOf (port^) )
  197. END;
  198.  
  199.  
  200. PROCEDURE DrawBevelLine(win:p_window,x,y,t:integer,orientation,bevelling:boolean,
  201.         DI:p_DrawInfo);
  202. BEGIN
  203.         if bevelling=TRUE then
  204.                 SetAPen(win^.RPort,DI^.dri_Pens^[SHINEPEN])
  205.         else
  206.                 SetAPen(win^.RPort,DI^.dri_Pens^[SHADOWPEN]);
  207.         if orientation=TRUE then
  208.                 Rectfill(win^.RPort,x,y,x+1,y+t)
  209.         else begin
  210.                 Move(win^.RPort,x,y);
  211.                 Draw(win^.RPort,x+t,y)
  212.         end;
  213.         if bevelling=FALSE then
  214.                 SetAPen(win^.RPort,DI^.dri_Pens^[SHINEPEN])
  215.         else
  216.                 SetAPen(win^.RPort,DI^.dri_Pens^[SHADOWPEN]);
  217.         if orientation=TRUE then
  218.                 Rectfill(win^.RPort,x+2,y,x+3,y+t)
  219.         else begin
  220.                 Move(win^.RPort,x,y+1);
  221.                 Draw(win^.RPort,x+t,y+1)
  222.         end;
  223. END;
  224.  
  225.  
  226. FUNCTION GiveQuestion(Title,Introducer,Possibilities:DirNameString,win:p_window):Long;
  227. VAR     ES      :                               EasyStruct;
  228. BEGIN
  229.         VariableString:=Introducer;
  230.         ES:=EasyStruct(sizeof(EasyStruct),0,Title,VariableString,Possibilities);
  231.         GiveQuestion:=EasyRequestArgs(win,^es,NIL,NIL)
  232. END;
  233.  
  234. PROCEDURE GiveError(Title,Introducer:DirNameString,win:p_window);
  235. VAR     ES      :                               EasyStruct;
  236.         Dummy   :                               long;
  237. BEGIN
  238.         VariableString:=Introducer;
  239.         ES:=EasyStruct(sizeof(EasyStruct),0,Title,VariableString,"OK");
  240.         Dummy:=EasyRequestArgs(win,^es,NIL,NIL)
  241. END;
  242.  
  243.  
  244. PROCEDURE NormalPointer(win:p_window);
  245. BEGIN
  246.         ClearPointer (win)
  247. END;
  248.  
  249. PROCEDURE WaitPointer(win:p_window);
  250. TYPE    PointerArray = Array [1..36] of word;
  251. VAR     InsidePointer:                          ^PointerArray;
  252. BEGIN
  253.         InsidePointer:=Ptr(Alloc_mem(SizeOf(PointerArray),MEMF_CHIP));
  254.         InsidePointer^:=PointerArray(
  255.                 $0   ,$0   ,
  256.                 $0400,$07C0,
  257.                 $0000,$07C0,
  258.                 $0100,$0380,
  259.                 $0000,$07E0,
  260.                 $07C0,$1FF8,
  261.                 $1FF0,$3FEC,
  262.                 $3FF8,$7FDE,
  263.                 $3FF8,$7FBE,
  264.                 $7FFC,$FF7F,
  265.                 $7EFC,$FFFF,
  266.                 $7FFC,$FFFF,
  267.                 $3FF8,$7FFE,
  268.                 $3FF8,$7FFE,
  269.                 $1FF0,$3FFC,
  270.                 $07C0,$1FF8,
  271.                 $0000,$07E0,
  272.                 $0   ,$0
  273.         );
  274.         SetPointer(win,InsidePointer,16,16,-6,0);
  275. END;
  276.  
  277.  
  278. PROCEDURE AboutXSearch;
  279. VAR     winAbout:                               p_window;
  280.         CG      :                               p_gadget;
  281.         NewGadgetFields:                        newgadget;
  282.         GadgetOK:                               p_gadget;
  283.         TagsCHANGES:                            array [1..10] of TagItem;
  284.         SIGNAL  :                               long;
  285.         amsg    :                               p_intuimessage;
  286.         dummy   :                               p_gadget;
  287. BEGIN
  288.         GadgetOK:=CreateContext(^CG);
  289.  
  290.         NewGadgetFields:=NewGadget(316,122,76,12,"Continue",^tattr,20,
  291.                 PLACETEXT_IN,VI,NIL);
  292.         GadgetOK:=CreateGadgetA(BUTTON_KIND,CG,^NewGadgetFields,NIL);
  293.  
  294.         if (CurrentMode=CM_OPTIONS) or (inSearch=TRUE) then
  295.                 TagsCHANGES[1]:=TagItem(WA_Top,50)
  296.         else
  297.                 TagsCHANGES[1]:=TagItem(WA_Top,100);
  298.         TagsCHANGES[2]:=TagItem(WA_Left,100);
  299.         TagsCHANGES[3]:=TagItem(WA_InnerHeight,139);
  300.         TagsCHANGES[4]:=TagItem(WA_InnerWidth,400);
  301.         TagsCHANGES[5].ti_Tag:=WA_Title;
  302.         TagsCHANGES[5].ti_Data:="XSearch 1.0";
  303.         TagsCHANGES[6]:=TagItem(WA_Flags,WFLG_CLOSEGADGET OR WFLG_GIMMEZEROZERO OR
  304.                 WFLG_RMBTRAP OR WFLG_ACTIVATE OR WFLG_DRAGBAR OR WFLG_SMART_REFRESH OR
  305.                 WFLG_DEPTHGADGET);
  306.         TagsCHANGES[7]:=TagItem(WA_IDCMP,IDCMP_CLOSEWINDOW or
  307.                 IDCMP_GADGETUP or IDCMP_VANILLAKEY);
  308.         TagsCHANGES[8]:=TagItem(WA_CustomScreen,long(scr));
  309.         TagsCHANGES[9].ti_Tag:=WA_Gadgets;
  310.         TagsCHANGES[9].ti_Data:=CG^;
  311.         TagsCHANGES[10].ti_Tag:=TAG_END;
  312.         winAbout:=OpenWindowTagList(NIL,^TagsCHANGES);
  313.         SIGNAL:=SetFont(winAbout^.RPort,tfont);
  314.  
  315.         GT_RefreshWindow(winAbout,NIL);
  316.  
  317.         SetAPen(winAbout^.rport,DI^.dri_Pens^[SHADOWPEN]);
  318.         RectFill(winAbout^.rport,0,2,63,12);
  319.         SetAPen(winAbout^.rport,DI^.dri_Pens^[HIGHLIGHTTEXTPEN]);
  320.         SetDrMd(winAbout^.rport,JAM1);
  321.         Move(winAbout^.rport,52,10); SIGNAL:=_Text(winAbout^.rport,"X",1);
  322.         SetAPen(winAbout^.rport,DI^.dri_Pens^[TEXTPEN]);
  323.         Move(winAbout^.rport,67,10); SIGNAL:=_Text(winAbout^.rport,"Search 1.0",10);
  324.         Move(winAbout^.rport,67,22); SIGNAL:=_Text(winAbout^.rport,"©/Program 1992 SP/PeekerBits",28);
  325.         Move(winAbout^.rport,67,34); SIGNAL:=_Text(winAbout^.rport,"Author:",7);
  326.         Move(winAbout^.rport,67,43); SIGNAL:=_Text(winAbout^.rport,"Stefan Plöchinger",17);
  327.         Move(winAbout^.rport,67,52); SIGNAL:=_Text(winAbout^.rport,"Kleiststraße 27",15);
  328.         Move(winAbout^.rport,35,61); SIGNAL:=_Text(winAbout^.rport,"DW- 8012 Ottobrunn",18);
  329.         Move(winAbout^.rport,67,73); SIGNAL:=_Text(winAbout^.rport,"programmed in KICKPascal (MAXON GmbH)",37);
  330.         Move(winAbout^.rport,67,78); Draw(winAbout^.rport,167,78);
  331.         Move(winAbout^.rport,67,88); SIGNAL:=_Text(winAbout^.rport,"XSearch 1.0 is FreeWare. All rights",35);
  332.         Move(winAbout^.rport,67,97); SIGNAL:=_Text(winAbout^.rport,"reserved. XSearch may only be distri-",37);
  333.         Move(winAbout^.rport,67,106); SIGNAL:=_Text(winAbout^.rport,"buted for non-commercial purposes.",34);
  334.  
  335.         amsg:=Wait_Port(winAbout^.userport);
  336.         amsg:=GT_GetIMsg(winAbout^.userport);
  337.         GT_ReplyIMsg(amsg);
  338.  
  339.         CloseWindow(winAbout);
  340.         FreeGadgets(CG);
  341. END;
  342.  
  343.  
  344. FUNCTION WhatToImport(VAR DejaSelected:long,DateAsk:boolean):long;
  345. VAR     winImport:                              p_window;
  346.         CG      :                               p_gadget;
  347.         CurrentGadget:                          p_gadget;
  348.         NewGadgetFields:                        newgadget;
  349.         GadgetListView:                         p_gadget;
  350.         TextNode,TextNodeBack:                  p_Node;
  351.         TextList:                               List;
  352.         ListContents:                           array[0..6] of string[19];
  353.         GadgetOK:                               p_gadget;
  354.         GadgetZurück:                           p_gadget;
  355.         GadgetCheck:                            p_gadget;
  356.         GadgetHow:                              p_gadget;
  357.         HowContents:                            array[1..3] of str;
  358.         GadgetHow2:                             p_gadget;
  359.         HowContents2:                           array[1..3] of str;
  360.         TagsCHANGES:                            array[1..10] of TagItem;
  361.         DidIt   :                               boolean;
  362.         imsg    :                               p_intuimessage;
  363.         I       :                               integer;
  364.         How     :                               boolean;
  365.         How2    :                               boolean;
  366.         dummy   :                               long;
  367.         Much    :                               integer;
  368. BEGIN
  369.         GadgetListView:=CreateContext(^CG);
  370.  
  371.         InitList(^TextList);
  372.         ListContents[0]:="  Name pattern";
  373.         ListContents[1]:="  Length control";
  374.         ListContents[2]:="  Attribute ctrl.";
  375.         ListContents[3]:="  Time specific.";
  376.         ListContents[4]:="  Comment pattern";
  377.         ListContents[5]:="  IFF pattern";
  378.         ListContents[6]:="  File-internals";
  379.         if DateAsk=TRUE then Much:=4 else Much:=6;
  380.         if (DateAsk=TRUE) and (DejaSelected=1) then begin Much:=5; DejaSelected:=0 end;
  381.         FOR i:=0 TO Much DO BEGIN
  382.                 New(TextNode);
  383.                 if (DejaSelected and (long(1) SHL i))<>0 then
  384.                         ListContents[i,1]:="·";
  385.                 TextNode^.ln_Succ:=NIL;
  386.                 TextNode^.ln_Pred:=NIL;
  387.                 TextNode^.ln_Type:=NT_UNKNOWN;
  388.                 TextNode^.ln_Pri:=0;
  389.                 TextNode^.ln_Name:=ListContents[i];
  390.                 AddTail(^TextList,TextNode)
  391.         END;
  392.         TagsCHANGES[1]:=TagItem(GTLV_ScrollWidth,16);
  393.         TagsCHANGES[2].ti_Tag:=GTLV_Labels;
  394.         TagsCHANGES[2].ti_Data:=long(^TextList);
  395.         TagsCHANGES[3]:=TagItem(LAYOUTA_Spacing,1);
  396.         TagsCHANGES[4].ti_Tag:=TAG_END;
  397.         NewGadgetFields:=NewGadget(10,16,174,70,"Take over:",^tattr,1,
  398.                 PLACETEXT_ABOVE,VI,NIL);
  399.         GadgetListView:=CreateGadgetA(LISTVIEW_KIND,CG,^NewGadgetFields,
  400.                 ^TagsCHANGES);
  401.  
  402.         NewGadgetFields:=NewGadget(200,71,75,12,"OK",^tattr,2,PLACETEXT_IN,
  403.                 VI,NIL);
  404.         GadgetOK:=CreateGadgetA(BUTTON_KIND,GadgetListView,^NewGadgetFields,NIL);
  405.  
  406.         NewGadgetFields:=NewGadget(285,71,75,12,"Cancel",^tattr,3,PLACETEXT_IN,
  407.                 VI,NIL);
  408.         GadgetZurück:=CreateGadgetA(BUTTON_KIND,GadgetOK,^NewGadgetFields,NIL);
  409.  
  410.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  411.         TagsCHANGES[2].ti_Tag:=TAG_END;
  412.         NewGadgetFields:=NewGadget(200,57,0,0,"_active autom.",^tattr,4,
  413.                 PLACETEXT_RIGHT,VI,NIL);
  414.         GadgetCheck:=CreateGadgetA(CHECKBOX_KIND,GadgetZurück,^NewGadgetFields,
  415.                 ^TagsCHANGES);
  416.  
  417.         if DateAsk=TRUE then begin
  418.                 HowContents[1]:="Length = _>=";
  419.                 HowContents[2]:="Length = _<=";
  420.                 HowContents[3]:=NIL;
  421.                 TagsCHANGES[1]:=TagItem(GT_UnderScore,long("_"));
  422.                 TagsCHANGES[2].ti_Tag:=GTMX_Labels;
  423.                 TagsCHANGES[2].ti_Data:=long(^HowContents);
  424.                 TagsCHANGES[3]:=TagItem(GTMX_Spacing,3);
  425.                 TagsCHANGES[4].ti_Tag:=TAG_END;
  426.                 NewGadgetFields:=NewGadget(200,11,0,0,NIL,^tattr,
  427.                         5,PLACETEXT_RIGHT,VI,NIL);
  428.                 GadgetHow:=CreateGadgetA(MX_KIND,GadgetCheck,^NewGadgetFields,
  429.                         ^TagsCHANGES);
  430.  
  431.                 HowContents2[1]:="Time = _from-Time";
  432.                 HowContents2[2]:="Time = _to-Time";
  433.                 HowContents2[3]:=NIL;
  434.                 TagsCHANGES[1]:=TagItem(GT_UnderScore,long("_"));
  435.                 TagsCHANGES[2].ti_Tag:=GTMX_Labels;
  436.                 TagsCHANGES[2].ti_Data:=long(^HowContents2);
  437.                 TagsCHANGES[3]:=TagItem(GTMX_Spacing,3);
  438.                 TagsCHANGES[4].ti_Tag:=TAG_END;
  439.                 NewGadgetFields:=NewGadget(200,34,0,0,NIL,^tattr,
  440.                         6,PLACETEXT_RIGHT,VI,NIL);
  441.                 GadgetHow2:=CreateGadgetA(MX_KIND,GadgetHow,^NewGadgetFields,
  442.                         ^TagsCHANGES)
  443.         end;
  444.  
  445.         TagsCHANGES[1]:=TagItem(WA_Top,50);
  446.         TagsCHANGES[2]:=TagItem(WA_Left,100);
  447.         TagsCHANGES[3]:=TagItem(WA_InnerHeight,101);
  448.         TagsCHANGES[4]:=TagItem(WA_InnerWidth,375);
  449.         TagsCHANGES[5].ti_Tag:=WA_Title;
  450.         if DateAsk=FALSE then
  451.                 TagsCHANGES[5].ti_Data:="XSearch 1.0 - Take over values"
  452.         else
  453.                 TagsCHANGES[5].ti_Data:="XSearch 1.0 - Values out of attr.";
  454.         TagsCHANGES[6]:=TagItem(WA_Flags,WFLG_CLOSEGADGET OR WFLG_GIMMEZEROZERO OR
  455.                 WFLG_RMBTRAP OR WFLG_ACTIVATE OR WFLG_DRAGBAR OR WFLG_SMART_REFRESH OR
  456.                 WFLG_DEPTHGADGET);
  457.         TagsCHANGES[7]:=TagItem(WA_IDCMP,IDCMP_CLOSEWINDOW or IDCMP_GADGETUP or
  458.                 IDCMP_GADGETDOWN or IDCMP_MOUSEMOVE or IDCMP_MOUSEBUTTONS or
  459.                 IDCMP_INTUITICKS or IDCMP_VANILLAKEY);
  460.         TagsCHANGES[8]:=TagItem(WA_CustomScreen,long(scr));
  461.         TagsCHANGES[9].ti_Tag:=WA_Gadgets;
  462.         TagsCHANGES[9].ti_Data:=CG^;
  463.         TagsCHANGES[10].ti_Tag:=TAG_END;
  464.         winImport:=OpenWindowTagList(NIL,^TagsCHANGES);
  465.         dummy:=SetFont(winImport^.RPort,tfont);
  466.  
  467.         DrawBevelLine(winImport,0,87,375,FALSE,FALSE,DI);
  468.         if length(ProjektName)>35 then VariableString:=copy(ProjektName,1,32)+"..." else VariableString:=ProjektName;
  469.         VariableString:="out of: "+VariableString;
  470.         SetAPen(winImport^.RPort,DI^.dri_Pens^[TEXTPEN]);
  471.         Move(winImport^.RPort,10,97); DidIt:=boolean(_Text(winImport^.RPort,VariableString,length(VariableString)));
  472.  
  473.         GT_RefreshWindow(winImport,NIL);
  474.         RefreshGadgets(winImport^.firstgadget,winImport,NIL);
  475.  
  476.         i:=-1;
  477.         How:=TRUE;
  478.         How2:=TRUE;
  479.  
  480.         REPEAT
  481.                 imsg:=Wait_Port(winImport^.UserPort);
  482.                 imsg:=GT_GetIMsg(winImport^.userport);
  483.                 GT_ReplyIMsg(imsg);
  484.                 case imsg^.class of
  485.                         IDCMP_CLOSEWINDOW:
  486.                                 i:=0
  487.                         IDCMP_VANILLAKEY: begin
  488.                                 if imsg^.code>96 then imsg^.code:=imsg^.code-32;
  489.                                 case imsg^.code of
  490.                                         13:     i:=1
  491.                                         27:     i:=0
  492.                                         62:     begin
  493.                                                 TagsCHANGES[1]:=TagItem(GTMX_Active,0);
  494.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  495.                                                 How:=TRUE;
  496.                                                 GT_SetGadgetAttrsA(GadgetHow,winImport,NIL,^TagsCHANGES)
  497.                                         end
  498.                                         60:     begin
  499.                                                 TagsCHANGES[1]:=TagItem(GTMX_Active,1);
  500.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  501.                                                 How:=FALSE;
  502.                                                 GT_SetGadgetAttrsA(GadgetHow,winImport,NIL,^TagsCHANGES)
  503.                                         end
  504.                                         70:     begin
  505.                                                 TagsCHANGES[1]:=TagItem(GTMX_Active,0);
  506.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  507.                                                 How2:=TRUE;
  508.                                                 GT_SetGadgetAttrsA(GadgetHow2,winImport,NIL,^TagsCHANGES)
  509.                                         end
  510.                                         84:     begin
  511.                                                 TagsCHANGES[1]:=TagItem(GTMX_Active,1);
  512.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  513.                                                 How2:=FALSE;
  514.                                                 GT_SetGadgetAttrsA(GadgetHow2,winImport,NIL,^TagsCHANGES)
  515.                                         end
  516.                                         65:     begin
  517.                                                 TagsCHANGES[1].ti_Tag:=GTCB_Checked;
  518.                                                 if (GadgetCheck^.flags and GFLG_Selected)<>0 then TagsCHANGES[1].ti_Data:=long(FALSE) else TagsCHANGES[1].ti_Data:=long(TRUE);
  519.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  520.                                                 GT_SetGadgetAttrsA(GadgetCheck,winImport,NIL,^TagsCHANGES)
  521.                                         end
  522.                                         else
  523.                                 end
  524.                         end
  525.                         IDCMP_GADGETDOWN: begin
  526.                                 CurrentGadget:=imsg^.iaddress;
  527.                                 case CurrentGadget^.gadgetid of
  528.                                         5:      if imsg^.code=0 then How:=TRUE else How:=FALSE
  529.                                         6:      if imsg^.code=0 then How2:=TRUE else How2:=FALSE
  530.                                         else
  531.                                 end
  532.                         end
  533.                         IDCMP_GADGETUP: begin
  534.                                 CurrentGadget:=imsg^.iaddress;
  535.                                 case CurrentGadget^.gadgetid of
  536.                                         1:      begin
  537.                                                 if (imsg^.code=1) or (imsg^.code=2) or (imsg^.code=3) then begin
  538.                                                         if ListContents[imsg^.code,1]="·" then ListContents[imsg^.code,1]:=" " else ListContents[imsg^.code,1]:="·" end
  539.                                                 else begin
  540.                                                         case ListContents[imsg^.code,1] of
  541.                                                                 (" "):   ListContents[imsg^.code,1]:="·"
  542.                                                                 ("·"):   ListContents[imsg^.code,1]:="+"
  543.                                                                 ("+"):   ListContents[imsg^.code,1]:=" "
  544.                                                         end
  545.                                                 end;
  546.                                                 GT_SetGadgetAttrsA(GadgetListView,winImport,NIL,NIL);
  547.                                         end
  548.                                         2:      i:=1
  549.                                         3:      i:=0
  550.                                         else
  551.                                 end
  552.                         end
  553.                         else
  554.                 end
  555.         UNTIL i<>-1;
  556.  
  557.         CloseWindow(winImport);
  558.         FreeGadgets(CG);
  559.         TextNode:=p_Node(TextList.lh_Head);
  560.         WHILE TextNode^.ln_Succ<>NIL DO BEGIN
  561.                 TextNodeBack:=p_Node(TextNode^.ln_Succ);
  562.                 Remove(TextNode);
  563.                 dispose(TextNode);
  564.                 TextNode:=TextNodeBack;
  565.         END;
  566.         dummy:=0;
  567.         if i=0 then WhatToImport:=0 else begin
  568.                 for i:=0 to Much do
  569.                         if (ListContents[i,1]="·") or (ListContents[i,1]="+") then dummy:=dummy or (long(1) SHL i);
  570.                 if ListContents[0,1]="+" then dummy:=dummy or (long(1) SHL 9);
  571.                 if ListContents[4,1]="+" then dummy:=dummy or (long(1) SHL 10);
  572.                 if ListContents[5,1]="+" then dummy:=dummy or (long(1) SHL 11);
  573.                 if ListContents[6,1]="+" then dummy:=dummy or (long(1) SHL 12);
  574.                 if (DateAsk=TRUE) and (How=TRUE) and (dummy<>0) then dummy:=dummy or (long(1) SHL 13);
  575.                 if (DateAsk=TRUE) and (How2=TRUE) and (dummy<>0) then dummy:=dummy or (long(1) SHL 14);
  576.                 if ((GadgetCheck^.flags and GFLG_Selected)<>0) and (dummy<>0) then dummy:=dummy or (long(1) SHL 15);
  577.                 WhatToImport:=dummy;
  578.         end;
  579. END;
  580.  
  581. FUNCTION PartPrefs (VAR MyPrefs,RealPrefs:Prefs,ofFile:boolean):boolean;
  582. LABEL   ExitOut;
  583. VAR     dummy   :                               long;
  584.         seperator:                              string[2];
  585. BEGIN
  586.         dummy:=WhatToImport(MyPrefs.Bool,ofFile);
  587.         if dummy=0 then begin PartPrefs:=FALSE; goto ExitOut end else PartPrefs:=TRUE;
  588.         if (MyPrefs.Pattern<>"") and ((dummy and 1)<>0) then begin
  589.                 if RealPrefs.Pattern="" then seperator:="" else seperator:="|";
  590.                 if (dummy and (long(1) shl 9))=0 then RealPrefs.Pattern:=MyPrefs.Pattern else if length(RealPrefs.Pattern)+length(MyPrefs.Pattern)+1<257 then RealPrefs.Pattern:=RealPrefs.Pattern+seperator+MyPrefs.Pattern;
  591.         end;
  592.         if (dummy and (long(1) shl 1))<>0 then begin
  593.                 if ((dummy and (long(1) shl 13))<>0) or (ofFile=FALSE) then
  594.                         RealPrefs.bigger:=MyPrefs.bigger;
  595.                 if ((dummy and (long(1) shl 13))=0) or (ofFile=FALSE) then
  596.                         RealPrefs.smaller:=MyPrefs.smaller
  597.         end;
  598.         if (dummy and (long(1) shl 2))<>0 then RealPrefs.Bits:=MyPrefs.Bits;
  599.         if (dummy and (long(1) shl 3))<>0 then begin
  600.                 if ((dummy and (long(1) shl 14))<>0) or (ofFile=FALSE) then begin
  601.                         RealPrefs.Date1:=MyPrefs.Date1;
  602.                         RealPrefs.Time1:=MyPrefs.Time1
  603.                 end;
  604.                 if ((dummy and (long(1) shl 14))=0) or (ofFile=FALSE) then begin
  605.                         RealPrefs.Date2:=MyPrefs.Date2;
  606.                         RealPrefs.Time2:=MyPrefs.Time2
  607.                 end
  608.         end;
  609.         if (MyPrefs.Comment<>"") and ((dummy and (long(1) shl 4))<>0) then begin
  610.                 if RealPrefs.Comment="" then seperator:="" else seperator:="|";
  611.                 if (dummy and (long(1) shl 10))=0 then RealPrefs.Comment:=MyPrefs.Comment else if length(RealPrefs.Comment)+length(MyPrefs.Comment)+1<257 then RealPrefs.Comment:=RealPrefs.Comment+seperator+MyPrefs.Comment;
  612.         end;
  613.         if (MyPrefs.Typ<>"") and ((dummy and (long(1) shl 5))<>0) then begin
  614.                 if RealPrefs.Typ="" then seperator:="" else seperator:="|";
  615.                 if (dummy and (long(1) shl 11))=0 then RealPrefs.Typ:=MyPrefs.Typ else if length(RealPrefs.Typ)+length(MyPrefs.Typ)+1<255 then RealPrefs.Typ:=RealPrefs.Typ+seperator+MyPrefs.Typ;
  616.         end;
  617.         if (MyPrefs.FileIn<>"") and ((dummy and (long(1) shl 6))<>0) then begin
  618.                 if RealPrefs.FileIn="" then seperator:="" else seperator:="|";
  619.                 if (dummy and (long(1) shl 12))=0 then RealPrefs.Typ:=MyPrefs.FileIn else if length(RealPrefs.FileIn)+length(MyPrefs.FileIn)+1<257 then RealPrefs.FileIn:=RealPrefs.FileIn+seperator+MyPrefs.FileIn;
  620.         end;
  621.         if (dummy and (long(1) shl 15))<>0 then begin
  622.                 if (dummy and 1)<>0 then RealPrefs.Bool:=RealPrefs.Bool and 1;
  623.                 if (dummy and (long(1) shl 1))<>0 then RealPrefs.Bool:=RealPrefs.Bool or (long(1) shl 1);
  624.                 if (dummy and (long(1) shl 2))<>0 then RealPrefs.Bool:=RealPrefs.Bool or (long(1) shl 2);
  625.                 if (dummy and (long(1) shl 3))<>0 then RealPrefs.Bool:=RealPrefs.Bool or (long(1) shl 3);
  626.                 if (dummy and (long(1) shl 5))<>0 then RealPrefs.Bool:=RealPrefs.Bool or (long(1) shl 4);
  627.                 if (dummy and (long(1) shl 4))<>0 then
  628.                         if MyPrefs.BoolComment=0 then RealPrefs.BoolComment:=long(UsedXSP.Sensitivity)+1 else RealPrefs.BoolComment:=MyPrefs.BoolComment;
  629.                 if (dummy and (long(1) shl 6))<>0 then
  630.                         if MyPrefs.BoolFileIn=0 then RealPrefs.BoolFileIn:=long(UsedXSP.Sensitivity)+1 else RealPrefs.BoolFileIn:=MyPrefs.BoolFileIn;
  631.         end;
  632.         ExitOut:
  633. END;
  634.  
  635. FUNCTION NameProjekt(Name:boolean):boolean;
  636. LABEL   ExitOut;
  637. VAR     Dummy   :                               boolean;
  638.         DidIt   :                               long;
  639. BEGIN
  640.         if Name=TRUE then ProjektName:="Unnamed";
  641.         Projekt:=ProjektDir;
  642.         NameProjekt:=AddPart(Projekt,ProjektName,364);
  643.         ProjektXSearch:="XSearch 1.0 ["+ProjektName+"]";
  644.         ExitOut:
  645. END;
  646.  
  647. PROCEDURE RestoreProjektNameDir;
  648. BEGIN
  649.         ProjektName:=FilePart(Projekt);
  650.         ProjektDir:=copy(Projekt,1,length(Projekt)-length(PathPart(ProjektName)));
  651.         if ProjektDir[length(ProjektDir)]="/" then ProjektDir:=copy(ProjektDir,1,length(ProjektDir)-1)
  652. END;
  653.  
  654. FUNCTION FileProjekt(Typ:integer,win:p_Window):boolean;
  655. VAR     Filer   :                               p_FileRequester;
  656.         TagsCHANGES:                            array[1..14] of TagItem;
  657.         Dummy   :                               Boolean;
  658. BEGIN
  659.         TagsCHANGES[1].ti_Tag:=ASL_Hail;
  660.         case Typ of
  661.                 0:      TagsCHANGES[1].ti_Data:="XSearch 1.0 - Open project";
  662.                 1:      TagsCHANGES[1].ti_Data:="XSearch 1.0 - Save project"
  663.                 2:      TagsCHANGES[1].ti_Data:="XSearch 1.0 - Take over values";
  664.                 3:      TagsCHANGES[1].ti_Data:="XSearch 1.0 - Values out of attr.";
  665.                 4:      TagsCHANGES[1].ti_Data:="XSearch 1.0 - Save results";
  666.                 5:      TagsCHANGES[1].ti_Data:="XSearch 1.0 - Choose directory"
  667.                 else
  668.         end;
  669.         TagsCHANGES[2].ti_Tag:=ASL_File;
  670.         TagsCHANGES[2].ti_Data:=ProjektName;
  671.         TagsCHANGES[3].ti_Tag:=ASL_Dir;
  672.         TagsCHANGES[3].ti_Data:=ProjektDir;
  673.         TagsCHANGES[4]:=TagItem(ASL_FuncFlags,FILF_PATGAD);
  674.         if (Typ=1) or (Typ=4) then TagsCHANGES[4].ti_Data:=TagsCHANGES[4].ti_Data or FILF_SAVE;
  675.         TagsCHANGES[5].ti_Tag:=ASL_Pattern;
  676.         TagsCHANGES[5].ti_Data:="~(#?.info)";
  677.         TagsCHANGES[6].ti_Tag:=ASL_OKText;
  678.         case Typ of
  679.                 0:      TagsCHANGES[6].ti_Data:="Open";
  680.                 1:      TagsCHANGES[6].ti_Data:="Save"
  681.                 2:      TagsCHANGES[6].ti_Data:="Import"
  682.                 3:      TagsCHANGES[6].ti_Data:="Import"
  683.                 4:      TagsCHANGES[6].ti_Data:="Save"
  684.                 else    TagsCHANGES[6].ti_Data:="OK"
  685.         end;
  686.         TagsCHANGES[7].ti_Tag:=ASL_CancelText;
  687.         TagsCHANGES[7].ti_Data:="Cancel";
  688.         TagsCHANGES[8].ti_Tag:=ASL_Window;
  689.         TagsCHANGES[8].ti_Data:=long(win);
  690.         TagsCHANGES[9]:=TagItem(ASL_LeftEdge,50);
  691.         TagsCHANGES[10]:=TagItem(ASL_TopEdge,28);
  692.         TagsCHANGES[11]:=TagItem(ASL_Height,210);
  693.         TagsCHANGES[12]:=TagItem(ASL_Width,340);
  694.         if Typ<>5 then TagsCHANGES[13].ti_Tag:=TAG_DONE
  695.         else begin
  696.                 TagsCHANGES[13]:=TagItem(ASL_ExtFlags1,FIL1F_NOFILES);
  697.                 TagsCHANGES[14].ti_Tag:=TAG_DONE
  698.         end;
  699.  
  700.         Filer:=AllocAslRequest(ASL_FileRequest,^TagsCHANGES);
  701.         Dummy:=AslRequest(Filer,NIL);
  702.         if Dummy=TRUE then begin
  703.                 FileProjekt:=TRUE;
  704.                 ProjektDir:=Filer^.rf_Dir;
  705.                 ProjektName:=Filer^.rf_File;
  706.         end else
  707.                 FileProjekt:=FALSE;
  708.         FreeAslRequest(Filer);
  709. END;
  710.  
  711. PROCEDURE ConvertDate(VAR Source:ExchangeString,sourcekind,destinationkind:integer) FORWARD;
  712. FUNCTION AlienizeTimeDate(DateTimeString:str,Time:boolean):string FORWARD;
  713. FUNCTION ConvertCurrentDateTime(Input:p_DateStamp,Time:boolean):string FORWARD;
  714.  
  715. FUNCTION ReadPrefs(FileName:string,VAR RealPrefs:Prefs,win:p_window,ImportAsk:boolean,
  716.         VAR MyList:p_List,doIt:Boolean):boolean;
  717. VAR     ReadFile:                               Text;
  718.         Dummy   :                               long;
  719.         Identifier:                             string[13];
  720.         MyPrefs :                               Prefs;
  721. LABEL   ExitOut;
  722. BEGIN
  723.         ReSet(ReadFile,FileName);
  724.         Dummy:=IOResult;
  725.         if Dummy<>0 then begin
  726.                 Dummy:=long(Fault(Dummy,NIL,VariableString,364));
  727.                 if (win<>NIL) and (ImportAsk=FALSE) then GiveError("XSearch 1.0 ["+ProjektName+"] - Open project","Error while opening."+LF+"("+VariableString+")",win);
  728.                 if (win<>NIL) and (ImportAsk=TRUE) then GiveError("XSearch 1.0 ["+ProjektName+"] - Take over values","The values couldn't have been"+LF+"taken over."+LF+"("+VariableString+")",win);
  729.                 ReadPrefs:=FALSE;
  730.                 goto ExitOut
  731.         end;
  732.         readln (ReadFile,Identifier);
  733.         if (Identifier<>"XSEARCH FILE") and (ImportAsk=FALSE) then begin GiveError("XSearch 1.0 ["+ProjektName+"] - Open project","The file is no XSearch project.",win); ReadPrefs:=FALSE; goto ExitOut end;
  734.         if (Identifier<>"XSEARCH FILE") and (ImportAsk=TRUE) then begin GiveError("XSearch 1.0 ["+ProjektName+"] - Take over values","The file is no XSearch project.",win); ReadPrefs:=FALSE; goto ExitOut end;
  735.         with MyPrefs do begin
  736.                 readln (ReadFile,Bool);
  737.                 readln (ReadFile,BoolComment);
  738.                 readln (ReadFile,BoolFileIn);
  739.                 readln (ReadFile,Pattern);
  740.                 readln (ReadFile,Bigger);
  741.                 readln (ReadFile,Smaller);
  742.                 readln (ReadFile,Bits);
  743.                 readln (ReadFile,Date1);
  744.                 readln (ReadFile,Time1);
  745.                 readln (ReadFile,Date2);
  746.                 readln (ReadFile,Time2);
  747.                 readln (ReadFile,DateFormat);
  748.                 readln (ReadFile,Comment);
  749.                 readln (ReadFile,Typ);
  750.                 readln (ReadFile,FileIn)
  751.         end;
  752.         Dummy:=IOResult;
  753.         if Dummy<>0 then begin
  754.                 Dummy:=long(Fault(Dummy,NIL,VariableString,364));
  755.                 if (win<>NIL) and (ImportAsk=FALSE) then GiveError("XSearch 1.0 ["+ProjektName+"] - Open project","Error while opening."+LF+"("+VariableString+")",win);
  756.                 if (win<>NIL) and (ImportAsk=TRUE) then GiveError("XSearch 1.0 ["+ProjektName+"] - Take over values","The values couldn't have been"+LF+"taken over."+LF+"("+VariableString+")",win);
  757.                 ReadPrefs:=FALSE;
  758.                 Close(ReadFile);
  759.                 goto ExitOut
  760.         end;
  761.         if doIt=TRUE then begin
  762.                 SearchNodeV:=p_SearchNode(MyList^.lh_Head);
  763.                 WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  764.                         SearchNodeBack:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  765.                         Remove(p_Node(^SearchNodeV^.sen_Node));
  766.                         dispose(SearchNodeV);
  767.                         SearchNodeV:=SearchNodeBack;
  768.                 END;
  769.                 while EOF(ReadFile)=FALSE do begin
  770.                         New(SearchNodeV);
  771.                         readln(ReadFile,SearchNodeV^.sen_Node.ln_Pri);
  772.                         readln(ReadFile,SearchNodeV^.sen_Path);
  773.                         VariableString:=SearchNodeV^.sen_Path;
  774.                         if VariableString[length(VariableString)]<>":" then VariableString:=FilePart(VariableString);
  775.                         if SearchNodeV^.sen_Node.ln_Pri=0 then VariableString:="  "+VariableString else VariableString:="  D "+VariableString;
  776.                         PrepareNode(SearchNodeV,VariableString);
  777.                         SortInDirList(MyList,^SearchNodeV^.sen_Node,3);
  778.                 end
  779.         end;
  780.         Close(ReadFile);
  781.         if Dummy<>0 then begin
  782.                 Dummy:=long(Fault(Dummy,NIL,VariableString,364));
  783.                 if (win<>NIL) and (ImportAsk=FALSE) then GiveError("XSearch 1.0 ["+ProjektName+"] - Open project","Error while opening."+LF+"("+VariableString+")",win);
  784.                 if (win<>NIL) and (ImportAsk=TRUE) then GiveError("XSearch 1.0 ["+ProjektName+"] - Take over values","The values couldn't have been"+LF+"taken over."+LF+"("+VariableString+")",win);
  785.                 ReadPrefs:=FALSE;
  786.                 goto ExitOut
  787.         end;
  788.         ConvertDate(MyPrefs.Date1,MyPrefs.DateFormat,UsedXSP.DateFormat);
  789.         ConvertDate(MyPrefs.Date2,MyPrefs.DateFormat,UsedXSP.DateFormat);
  790.         if ImportAsk=TRUE then begin
  791.                 if (MyPrefs.Bool and (long(1) shl 4))<>0 then MyPrefs.Bool:=(MyPrefs.Bool or (long(1) shl 5)) xor (long(1) shl 4);
  792.                 if MyPrefs.BoolComment<>0 then MyPrefs.Bool:=MyPrefs.Bool or (long(1) shl 4);
  793.                 if MyPrefs.BoolFileIn<>0 then MyPrefs.Bool:=MyPrefs.Bool or (long(1) shl 6);
  794.                 ReadPrefs:=PartPrefs(MyPrefs,RealPrefs,FALSE)
  795.         end else
  796.                 RealPrefs:=MyPrefs;
  797.         ReadPrefs:=TRUE;
  798.         ExitOut:
  799. END;
  800.  
  801. FUNCTION WritePrefs(FileName:string,RealPrefs:Prefs,win:p_window,MyList:p_List):boolean;
  802. VAR     WriteFile:                              Text;
  803.         Dummy   :                               integer;
  804. LABEL   ExitOut;
  805. BEGIN
  806.         ReWrite(WriteFile,FileName);
  807.         Dummy:=IOResult;
  808.         if Dummy<>0 then begin
  809.                 Dummy:=integer(Fault(Dummy,NIL,VariableString,364));
  810.                 if win<>NIL then GiveError("XSearch 1.0 ["+ProjektName+"] - Save project","Error while saving."+LF+"("+VariableString+")",win);
  811.                 WritePrefs:=FALSE;
  812.                 goto ExitOut
  813.         end;
  814.         writeln (WriteFile,"XSEARCH FILE");
  815.         with RealPrefs do begin
  816.                 writeln (WriteFile,Bool);
  817.                 writeln (WriteFile,BoolComment);
  818.                 writeln (WriteFile,BoolFileIn);
  819.                 writeln (WriteFile,Pattern);
  820.                 writeln (WriteFile,Bigger);
  821.                 writeln (WriteFile,Smaller);
  822.                 writeln (WriteFile,Bits);
  823.                 writeln (WriteFile,Date1);
  824.                 writeln (WriteFile,Time1);
  825.                 writeln (WriteFile,Date2);
  826.                 writeln (WriteFile,Time2);
  827.                 writeln (WriteFile,DateFormat);
  828.                 writeln (WriteFile,Comment);
  829.                 writeln (WriteFile,Typ);
  830.                 writeln (WriteFile,FileIn)
  831.         end;
  832.         Dummy:=IOResult;
  833.         if Dummy<>0 then begin
  834.                 Dummy:=integer(Fault(Dummy,NIL,VariableString,364));
  835.                 if win<>NIL then GiveError("XSearch 1.0 ["+ProjektName+"] - Save project","Error while saving."+LF+"("+VariableString+")",win);
  836.                 WritePrefs:=FALSE;
  837.                 Close(WriteFile);
  838.                 goto ExitOut
  839.         end;
  840.         SearchNodeV:=p_SearchNode(MyList^.lh_Head);
  841.         WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  842.                 writeln (WriteFile,SearchNodeV^.sen_Node.ln_Pri);
  843.                 writeln (WriteFile,SearchNodeV^.sen_Path);
  844.                 SearchNodeV:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)
  845.         END;
  846.         Close(WriteFile);
  847.         if Dummy<>0 then begin
  848.                 Dummy:=integer(Fault(Dummy,NIL,VariableString,364));
  849.                 if win<>NIL then GiveError("XSearch 1.0 ["+ProjektName+"] - Save project","Error while saving."+LF+"("+VariableString+")",win);
  850.                 WritePrefs:=FALSE;
  851.                 goto ExitOut
  852.         end;
  853.         WritePrefs:=TRUE;
  854.         ExitOut:
  855. END;
  856.  
  857. FUNCTION ReadPrefsOutOfFile(FileName:string,VAR RealPrefs:Prefs,win:p_window):boolean;
  858. VAR     ReadFile:                               BPTR;
  859.         forTyp  :                               Text;
  860.         Dummy   :                               long;
  861.         ReadFileInfo:                           p_FileInfoBlock;
  862.         MyPrefs :                               Prefs;
  863.         dummy2  :                               string[5];
  864.         i       :                               integer;
  865. LABEL   ExitOut;
  866. BEGIN
  867.         ReadFile:=Lock(FileName,SHARED_LOCK);
  868.         Reset(forTyp,FileName);
  869.         Dummy:=IOResult;
  870.         MyPrefs.Bool:=0;
  871.         if (Dummy=0) and (filesize(forTyp)>11) then begin
  872.                 for i:=1 to 4 do read(forTyp,dummy2[i]);
  873.                 dummy2[5]:=chr(0);
  874.                 if dummy2="FORM" then begin
  875.                         MyPrefs.Bool:=1;
  876.                         for i:=1 to 4 do read(forTyp,dummy2[i]);
  877.                         for i:=1 to 4 do read(forTyp,dummy2[i]);
  878.                 end;
  879.                 Close(forTyp);
  880.                 Dummy:=IOResult;
  881.         end;
  882.         if Dummy<>0 then begin
  883.                 Dummy:=long(Fault(Dummy,NIL,VariableString,364));
  884.                 GiveError("XSearch 1.0 ["+ProjektName+"] - Values out of attr.","Error while reading."+LF+"("+VariableString+")",win);
  885.                 ReadPrefsOutOfFile:=FALSE;
  886.                 goto ExitOut
  887.         end;
  888.         new(ReadFileInfo);
  889.         Dummy:=Examine(ReadFile,ReadFileInfo);
  890.         if Dummy=0 then begin
  891.                 GiveError("XSearch 1.0 ["+ProjektName+"] - Values out of attr.","Error while reading.",win);
  892.                 ReadPrefsOutOfFile:=FALSE;
  893.                 goto ExitOut
  894.         end;
  895.         UnLock(ReadFile);
  896.         MyPrefs.Typ:=copy(dummy2,1,4);
  897.         MyPrefs.Pattern:=ReadFileInfo^.fib_FileName;
  898.         MyPrefs.Bigger:=ReadFileInfo^.fib_Size;
  899.         MyPrefs.Smaller:=ReadFileInfo^.fib_Size;
  900.         MyPrefs.Comment:=ReadFileInfo^.fib_Comment;
  901.         if (ReadFileInfo^.fib_Protection and FIBB_HIDDEN)<>0 then MyPrefs.Bits[1]:="H" else MyPrefs.Bits[1]:="-";
  902.         if (ReadFileInfo^.fib_Protection and FIBB_SCRIPT)<>0 then MyPrefs.Bits[2]:="S" else MyPrefs.Bits[2]:="-";
  903.         if (ReadFileInfo^.fib_Protection and FIBB_PURE)<>0 then MyPrefs.Bits[3]:="P" else MyPrefs.Bits[3]:="-";
  904.         if (ReadFileInfo^.fib_Protection and FIBB_ARCHIVE)<>0 then MyPrefs.Bits[4]:="A" else MyPrefs.Bits[4]:="-";
  905.         if (ReadFileInfo^.fib_Protection and FIBB_READ)=0 then MyPrefs.Bits[5]:="R" else MyPrefs.Bits[5]:="-";
  906.         if (ReadFileInfo^.fib_Protection and FIBB_WRITE)=0 then MyPrefs.Bits[6]:="W" else MyPrefs.Bits[6]:="-";
  907.         if (ReadFileInfo^.fib_Protection and FIBB_EXECUTE)=0 then MyPrefs.Bits[7]:="E" else MyPrefs.Bits[7]:="-";
  908.         if (ReadFileInfo^.fib_Protection and FIBB_DELETE)=0 then MyPrefs.Bits[8]:="D" else MyPrefs.Bits[8]:="-";
  909.         VariableString:=ConvertCurrentDateTime(^ReadFileInfo^.fib_Date,FALSE); VariableStr:=VariableString;
  910.         VariableString:=AlienizeTimeDate(VariableStr,FALSE);
  911.         MyPrefs.Date1:=VariableString; MyPrefs.Date2:=VariableString;
  912.         VariableString:=ConvertCurrentDateTime(^ReadFileInfo^.fib_Date,TRUE); VariableStr:=VariableString;
  913.         VariableString:=AlienizeTimeDate(VariableStr,TRUE);
  914.         MyPrefs.Time1:=VariableString; MyPrefs.Time2:=VariableString;
  915.         dispose(ReadFileInfo);
  916.         ReadPrefsOutOfFile:=PartPrefs(MyPrefs,RealPrefs,TRUE);
  917.         ExitOut:
  918. END;
  919.  
  920.  
  921. PROCEDURE GiveMessageOptions(Introducer:string,win:p_window,DI:p_DrawInfo) FORWARD;
  922.  
  923. FUNCTION VerifyLength(Length:long,win:p_window,DI:p_DrawInfo):boolean;
  924. BEGIN
  925.         if Length<0 then begin VerifyLength:=FALSE; GiveMessageOptions("Length: The value mustn't be smaller than 0.",win,DI) end else VerifyLength:=TRUE
  926. END;
  927.  
  928. FUNCTION VerifyPattern(PatternString:str,Title:string,win:p_window,
  929.         DI:p_DrawInfo):boolean;
  930. VAR     DST     :                               string[769];
  931. BEGIN
  932.         if ParsePattern(PatternString,DST,769)=-1 then begin VerifyPattern:=FALSE; GiveMessageOptions(Title+"The pattern is wrong.",win,DI) end else VerifyPattern:=TRUE
  933. END;
  934.  
  935. FUNCTION AlienizeIFF(IFFString:str):string;
  936. VAR     alienized:                              string[256];
  937.         i,k     :                               integer;
  938. BEGIN
  939.         alienized:=IFFString;
  940.         for i:=1 to length(alienized) do
  941.                 for k:=1 to 40 do begin
  942.                         alienized[i]:=upcase(alienized[i]);
  943.                         if (alienized[i]=",") or (alienized[i]=";") or (alienized[i]=" ") then alienized[i]:="|"
  944.                 end;
  945.         if copy(alienized,length(alienized),1)="|" then alienized:=copy(alienized,1,length(alienized)-1);
  946.         AlienizeIFF:=alienized
  947. END;
  948.  
  949. FUNCTION VerifyIFF(IFFString:str,win:p_window,DI:p_DrawInfo):boolean;
  950. LABEL   HereOut,Out2;
  951. VAR     dummy   :                               string[256];
  952.         i,k     :                               integer;
  953.         dummy2  :                               boolean;
  954.         Chars   :                               string[40];
  955. BEGIN
  956.         Chars:="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 ";
  957.         dummy2:=TRUE;
  958.         dummy:=IFFString;
  959.         if ((length(dummy)+1) mod 5<>0) and (length(dummy)<>0) then begin dummy2:=FALSE; GiveMessageOptions("IFF: No acceptable input.",win,DI); goto Out2 end;
  960.         for i:=1 to length(dummy) do begin
  961.                 if i mod 5=0 then begin
  962.                         if not (dummy[i]="|") then begin dummy2:=FALSE; dummy:="Char at position "+intstr(i)+" is wrong."; GiveMessageOptions("IFF: "+dummy,win,DI); goto Out2 end
  963.                 end else begin
  964.                         for k:=1 to 37 do begin
  965.                                 if dummy[i]=Chars[k] then goto HereOut else
  966.                                 if (dummy[i]<>Chars[k]) and (k=37) then begin dummy2:=FALSE; dummy:="Char at position "+intstr(i)+" is wrong."; GiveMessageOptions("IFF: "+dummy,win,DI); goto Out2 end
  967.                         end
  968.                 end;
  969.                 HereOut:
  970.         end;
  971.         Out2:
  972.         VerifyIFF:=dummy2
  973. END;
  974.  
  975. PROCEDURE ConvertDate;
  976. VAR     dummy   :                               string[3];
  977. BEGIN
  978.         if sourcekind<>destinationkind then begin
  979.                 if (sourcekind>0) and (destinationkind=0) then begin Source[3]:="."; Source[6]:="." end;
  980.                 if (sourcekind=0) and (destinationkind>0) then begin Source[3]:="-"; Source[6]:="-" end;
  981.                 if ((sourcekind=2) and (destinationkind<2)) or ((sourcekind<2) and (destinationkind=2)) then begin
  982.                         dummy:=copy(Source,1,2);
  983.                         Source:=copy(Source,4,2)+Source[3]+dummy+copy(Source,6,3)
  984.                 end
  985.         end
  986. END;
  987.  
  988. FUNCTION AlienizeRawTimeDate(DateTimeString:str,Time:boolean):string;
  989. VAR     alienized:                              string[11];
  990. BEGIN
  991.         alienized:=DateTimeString;
  992.         while pos(" ",alienized)<>0 do
  993.                 alienized:=copy(alienized,1,pos(" ",alienized)-1)+copy(alienized,pos(" ",alienized)+1,length(alienized)-pos(" ",alienized));
  994.         if alienized="" then alienized:=ConvertCurrentDateTime(NIL,Time);
  995.         AlienizeRawTimeDate:=alienized
  996. END;
  997.  
  998. FUNCTION AlienizeTimeDate;
  999. VAR     alienized,dummy:                        string[11];
  1000.         whatThing:                              char;
  1001. BEGIN
  1002.         if Time=FALSE then begin if UsedXSP.DateFormat=0 then whatThing:="." else whatThing:="-" end else whatThing:=":";
  1003.         alienized:=DateTimeString;
  1004.         if pos(whatThing,alienized)=2 then alienized:="0"+alienized;
  1005.         dummy:=copy(alienized,4,length(alienized)-3);
  1006.         if pos(whatThing,dummy)=2 then alienized:=copy(alienized,1,3)+"0"+copy(alienized,4,length(alienized)-3);
  1007.         if Time=TRUE then begin
  1008.                 if length(alienized)-6=1 then alienized:=copy(alienized,1,6)+"0"+copy(alienized,7,1)
  1009.         end;
  1010.         AlienizeTimeDate:=alienized
  1011. END;
  1012.  
  1013. FUNCTION VerifyRawTimeDate(DateTimeString:str,win:p_window,Time:boolean,
  1014.         DI:p_DrawInfo):boolean;
  1015. LABEL   ExitHere;
  1016. VAR     alienized,dummy:                        string[11];
  1017.         Nums    :                               string[12];
  1018.         Introducer:                             string;
  1019.         i,k     :                               integer;
  1020.         OneRight,Dummy2:                        boolean;
  1021.         whatThing:                              char;
  1022.         hangMan :                               array [0..3] of String;
  1023. BEGIN
  1024.         alienized:=DateTimeString;
  1025.         if Time=FALSE then begin
  1026.                 if UsedXSP.DateFormat=0 then begin
  1027.                         Nums:="0123456789.";
  1028.                         whatThing:=".";
  1029.                         HangMan[1]:="day";
  1030.                         HangMan[2]:="month"
  1031.                 end else begin
  1032.                         Nums:="0123456789-";
  1033.                         whatThing:="-";
  1034.                         HangMan[1]:="month";
  1035.                         HangMan[2]:="day"
  1036.                 end;
  1037.                 HangMan[0]:="Date: "; HangMan[3]:="year"
  1038.         end else begin
  1039.                 Nums:="0123456789:";
  1040.                 whatThing:=":";
  1041.                 HangMan[0]:="Time: "; HangMan[1]:="hours"; HangMan[2]:="minutes"; HangMan[3]:="seconds"
  1042.         end;
  1043.         VerifyRawTimeDate:=TRUE;
  1044.         Dummy2:=TRUE;
  1045.         for i:=length(alienized) downto 1 do begin
  1046.                 OneRight:=FALSE;
  1047.                 for k:=1 to 12 do
  1048.                         if alienized[i]=Nums[k] then OneRight:=TRUE;
  1049.                 if OneRight=FALSE then begin Dummy2:=FALSE; Introducer:="Input at position "+intstr(i)+" is wrong." end
  1050.         end;
  1051.         if Dummy2=FALSE then goto ExitHere;
  1052.         if (pos(whatThing,alienized)>3) or (pos(whatThing,alienized)<2) then begin Dummy2:=FALSE; Introducer:="Wrong specification of "+HangMan[1]+"." end else begin
  1053.                 dummy:=copy(alienized,pos(whatThing,alienized)+1,length(alienized)-(pos(whatThing,alienized)));
  1054.                 if (pos(whatThing,dummy)>3) or (pos(whatThing,dummy)<2) then begin Dummy2:=FALSE; Introducer:="Wrong specification of "+HangMan[2]+"." end else begin
  1055.                         dummy:=copy(dummy,pos(whatThing,dummy)+1,length(dummy)-(pos(whatThing,dummy)));
  1056.                         if Time=FALSE then begin
  1057.                                 if length(dummy)<>2 then begin Dummy2:=FALSE; Introducer:="Wrong specification of "+HangMan[3]+"." end end
  1058.                         else begin
  1059.                                 if length(dummy)<>2 then begin Dummy2:=FALSE; Introducer:="Wrong specification of "+HangMan[3]+"." end
  1060.                         end
  1061.                 end
  1062.         end;
  1063.         ExitHere:
  1064.         if Dummy2=FALSE then begin
  1065.                 VerifyRawTimeDate:=FALSE;
  1066.                 GiveMessageOptions(hangMan[0]+Introducer,win,DI)
  1067.         end;
  1068. END;
  1069.  
  1070. PROCEDURE ConvertTimeDate(DateTimeString:str,Time:boolean,VAR BACK:DateTimeFormat);
  1071. VAR     alienized:                              string[11];
  1072.         Dummy   :                               integer;
  1073. BEGIN
  1074.         alienized:=DateTimeString;
  1075.         val(copy(alienized,1,2),BACK.DH,Dummy);
  1076.         val(copy(alienized,4,2),BACK.MM,Dummy);
  1077.         val(copy(alienized,7,2),BACK.YS,Dummy);
  1078.         if (TIME=FALSE) and (UsedXSP.DateFormat=2) then begin
  1079.                 dummy:=BACK.MM;
  1080.                 BACK.MM:=BACK.DH;
  1081.                 BACK.DH:=dummy
  1082.         end
  1083. END;
  1084.  
  1085. FUNCTION ConvertCurrentDateTime;
  1086. VAR     qc      :                               long;
  1087.         ds      :                               Datestamp;
  1088.         cd      :                               ClockData;
  1089. BEGIN
  1090.         if Input=NIL then DOSDateStamp(^ds) else ds:=Input^;
  1091.         qc:=ds.ds_days*24*60*60;
  1092.         qc:=ds.ds_minute*60+qc;
  1093.         qc:=round(ds.ds_tick/50)+qc;
  1094.         Amiga2Date(qc,^cd);
  1095.         if Time=FALSE then begin
  1096.                 case UsedXSP.DateFormat of
  1097.                         0:      ConvertCurrentDateTime:=intstr(cd.mday)+"."+intstr(cd.month)+"."+copy(intstr(cd.year),3,2)
  1098.                         1:      ConvertCurrentDateTime:=intstr(cd.mday)+"-"+intstr(cd.month)+"-"+copy(intstr(cd.year),3,2)
  1099.                         2:      ConvertCurrentDateTime:=intstr(cd.month)+"-"+intstr(cd.mday)+"-"+copy(intstr(cd.year),3,2)
  1100.                         else
  1101.                 end
  1102.         end else
  1103.                 ConvertCurrentDateTime:=intstr(cd.hour)+":"+intstr(cd.min)+":"+intstr(cd.sec);
  1104. END;
  1105.  
  1106. FUNCTION VerifyDate(DaysNights:DateTimeformat,win:p_window,DI:p_DrawInfo):boolean;
  1107. VAR     MonthSet:                               array [1..12] of integer;
  1108.         SchaltCount,Dummy:                      integer;
  1109.         Dummy2  :                               boolean;
  1110.         Introducer:                             string;
  1111. BEGIN
  1112.         VerifyDate:=TRUE;
  1113.         Dummy2:=TRUE;
  1114.         MonthSet[1]:=31; MonthSet[2]:=28; MonthSet[3]:=31; MonthSet[4]:=30; MonthSet[5]:=31; MonthSet[6]:=30; MonthSet[7]:=31; MonthSet[8]:=31; MonthSet[9]:=30; MonthSet[10]:=31; MonthSet[11]:=30; MonthSet[12]:=31;
  1115.         val(copy(intstr(DaysNights.YS),3,2),SchaltCount,Dummy);
  1116.         if (SchaltCount=0) then val(copy(intstr(DaysNights.YS),1,2),SchaltCount,Dummy);
  1117.         if SchaltCount mod 4=0 then MonthSet[2]:=MonthSet[2]+1;
  1118.         if (DaysNights.MM>12) or (DaysNights.MM<1) then begin Dummy2:=FALSE; Introducer:="Wrong specification of month." end else
  1119.                 if (DaysNights.DH<1) or (DaysNights.DH>MonthSet[DaysNights.MM]) then begin Dummy2:=FALSE; Introducer:="Wrong specification of day." end else
  1120.                         if DaysNights.YS<78 then begin Dummy2:=FALSE; Introducer:="Wrong specification of year." end;
  1121.         if Dummy2=FALSE then begin
  1122.                 VerifyDate:=FALSE;
  1123.                 GiveMessageOptions("Date: "+Introducer,win,DI)
  1124.         end;
  1125. END;
  1126.  
  1127. FUNCTION VerifyTime(DaysNights:DateTimeformat,win:p_window,DI:p_DrawInfo):boolean;
  1128. VAR     Dummy   :                               integer;
  1129.         Dummy2  :                               boolean;
  1130.         Introducer:                             string;
  1131. BEGIN
  1132.         VerifyTime:=TRUE;
  1133.         Dummy2:=TRUE;
  1134.         if (DaysNights.DH<0) or (DaysNights.DH>23) then begin Dummy2:=FALSE; Introducer:="Wrong specification of hours." end else
  1135.                 if (DaysNights.MM<0) or (DaysNights.MM>59) then begin Dummy2:=FALSE; Introducer:="Wrong specification of minutes." end else
  1136.                         if (DaysNights.YS<0) or (DaysNights.YS>59) then begin Dummy2:=FALSE; Introducer:="Wrong specification of seconds." end;
  1137.         if Dummy2=FALSE then begin
  1138.                 VerifyTime:=FALSE;
  1139.                 GiveMessageOptions("Time: "+Introducer,win,DI)
  1140.         end;
  1141. END;
  1142.  
  1143. FUNCTION AlienizeBits(BitString:str):string;
  1144. VAR     i       :                               integer;
  1145.         alienized,Bits:                         string[9];
  1146. BEGIN
  1147.         Bits:="hsparwed";
  1148.         alienized:=BitString;
  1149.         for i:=1 to 8 do begin
  1150.                 if copy(alienized,i,1)=" " then alienized[i]:="*";
  1151.                 if copy(alienized,i,1)=copy(Bits,i,1) then begin
  1152.                         alienized[i]:=upcase(Bits[i]);
  1153.                         end;
  1154.                 end;
  1155.         AlienizeBits:=Alienized;
  1156. END;
  1157.  
  1158. FUNCTION VerifyBits(BitString:string,win:p_window,DI:p_DrawInfo):boolean;
  1159. CONST   Bits = "HSPARWED";
  1160. VAR     i       :                               integer;
  1161.         introducer:                             string[9];
  1162.         Backup  :                               string[2];
  1163. BEGIN
  1164.         VerifyBits:=TRUE;
  1165.         introducer:=BitString;
  1166.         Backup:="0";
  1167.         for i:=1 to 8 do begin
  1168.                 if Introducer[i]<>copy(Bits,i,1) then
  1169.                         if Introducer[i]<>"-" then
  1170.                                 if Introducer[i]<>"*" then Backup:=copy(Bits,i,1)
  1171.         end;
  1172.         if Backup<>"0" then begin
  1173.                 VariableString:="Wrong specific. of the "+Backup+" attribute.";
  1174.                 GiveMessageOptions("Attributes: "+VariableString,win,DI);
  1175.                 VerifyBits:=FALSE end
  1176. END;
  1177.  
  1178. PROCEDURE BackupOptions(VAR RealPrefs:Prefs,GadgetName,GadgetPattern,GadgetLength,
  1179.         Gadgetbigger,Gadgetsmaller,GadgetBits,GadgetBS,GadgetDate,
  1180.         Gadgetvom1,Gadgetvom2,Gadgetbis1,Gadgetbis2,GadgetSTRING,
  1181.         GadgetIFF,GadgetTyp,GadgetIN:p_gadget,BoolComment,BoolFileIn:short);
  1182. VAR     SI      :                               p_StringInfo;
  1183. BEGIN
  1184.         SI:=GadgetPattern^.SpecialInfo; RealPrefs.Pattern:=SI^.Buffer;
  1185.         SI:=Gadgetbigger^.SpecialInfo; RealPrefs.Bigger:=SI^.LongInt;
  1186.         SI:=Gadgetsmaller^.SpecialInfo; RealPrefs.Smaller:=SI^.LongInt;
  1187.         SI:=GadgetBS^.SpecialInfo; RealPrefs.Bits:=SI^.Buffer;
  1188.         SI:=Gadgetvom1^.SpecialInfo; RealPrefs.Date1:=SI^.Buffer;
  1189.         SI:=Gadgetvom2^.SpecialInfo; RealPrefs.Time1:=SI^.Buffer;
  1190.         SI:=Gadgetbis1^.SpecialInfo; RealPrefs.Date2:=SI^.Buffer;
  1191.         SI:=Gadgetbis2^.SpecialInfo; RealPrefs.Time2:=SI^.Buffer;
  1192.         SI:=GadgetSTRING^.SpecialInfo; RealPrefs.Comment:=SI^.Buffer;
  1193.         SI:=GadgetTyp^.SpecialInfo; RealPrefs.Typ:=SI^.Buffer;
  1194.         SI:=GadgetIN^.SpecialInfo; RealPrefs.FileIn:=SI^.Buffer;
  1195.         RealPrefs.Bool:=0;
  1196.         RealPrefs.BoolComment:=BoolComment;
  1197.         RealPrefs.BoolFileIn:=BoolFileIn;
  1198.         if (GadgetName^.flags and GFLG_Selected<>0) then RealPrefs.Bool:=1;
  1199.         if (GadgetLength^.flags and GFLG_Selected<>0) then RealPrefs.Bool:=RealPrefs.Bool or (long(1) SHL 1);
  1200.         if (GadgetBits^.flags and GFLG_Selected<>0) then RealPrefs.Bool:=RealPrefs.Bool or (long(1) SHL 2);
  1201.         if (GadgetDate^.flags and GFLG_Selected<>0) then RealPrefs.Bool:=RealPrefs.Bool or (long(1) SHL 3);
  1202.         if (GadgetIFF^.flags and GFLG_Selected<>0) then RealPrefs.Bool:=RealPrefs.Bool or (long(1) SHL 4);
  1203.         RealPrefs.DateFormat:=UsedXSP.DateFormat
  1204. END;
  1205.  
  1206. PROCEDURE RestoreOptions(RealPrefs:Prefs,VAR GadgetName,GadgetPattern,GadgetLength,
  1207.         Gadgetbigger,Gadgetsmaller,GadgetBits,GadgetBS,GadgetDate,
  1208.         Gadgetvom1,Gadgetvom2,Gadgetbis1,Gadgetbis2,GadgetComment,
  1209.         GadgetSTRING,GadgetIFF,GadgetTyp,GadgetFile,GadgetIN:p_gadget,
  1210.         win:p_window);
  1211. VAR     TagsCHANGES:                            array [1..2] of TagItem;
  1212. BEGIN
  1213.         TagsCHANGES[1]:=TagItem(GTCB_Checked,long((RealPrefs.Bool and 1)=1));
  1214.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1215.         GT_SetGadgetAttrsA(GadgetName,win,NIL,^TagsCHANGES);
  1216.  
  1217.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=RealPrefs.Pattern;
  1218.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1219.         GT_SetGadgetAttrsA(GadgetPattern,win,NIL,^TagsCHANGES);
  1220.  
  1221.         TagsCHANGES[1]:=TagItem(GTCB_Checked,long((RealPrefs.Bool and (long(1) SHL 1))<>0));
  1222.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1223.         GT_SetGadgetAttrsA(GadgetLength,win,NIL,^TagsCHANGES);
  1224.  
  1225.         TagsCHANGES[1]:=TagItem(GTIN_Number,RealPrefs.Bigger);
  1226.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1227.         GT_SetGadgetAttrsA(Gadgetbigger,win,NIL,^TagsCHANGES);
  1228.  
  1229.         TagsCHANGES[1]:=TagItem(GTIN_Number,RealPrefs.Smaller);
  1230.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1231.         GT_SetGadgetAttrsA(Gadgetsmaller,win,NIL,^TagsCHANGES);
  1232.  
  1233.         TagsCHANGES[1]:=TagItem(GTCB_Checked,long((RealPrefs.Bool and (long(1) SHL 2))<>0));
  1234.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1235.         GT_SetGadgetAttrsA(GadgetBits,win,NIL,^TagsCHANGES);
  1236.  
  1237.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=RealPrefs.Bits;
  1238.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1239.         GT_SetGadgetAttrsA(GadgetBS,win,NIL,^TagsCHANGES);
  1240.  
  1241.         TagsCHANGES[1]:=TagItem(GTCB_Checked,long((RealPrefs.Bool and (long(1) SHL 3))<>0));
  1242.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1243.         GT_SetGadgetAttrsA(GadgetDate,win,NIL,^TagsCHANGES);
  1244.  
  1245.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=RealPrefs.Date1;
  1246.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1247.         GT_SetGadgetAttrsA(Gadgetvom1,win,NIL,^TagsCHANGES);
  1248.  
  1249.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=RealPrefs.Time1;
  1250.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1251.         GT_SetGadgetAttrsA(Gadgetvom2,win,NIL,^TagsCHANGES);
  1252.  
  1253.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=RealPrefs.Date2;
  1254.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1255.         GT_SetGadgetAttrsA(Gadgetbis1,win,NIL,^TagsCHANGES);
  1256.  
  1257.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=RealPrefs.Time2;
  1258.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1259.         GT_SetGadgetAttrsA(Gadgetbis2,win,NIL,^TagsCHANGES);
  1260.  
  1261.         TagsCHANGES[1]:=TagItem(GTCY_Active,long(RealPrefs.BoolComment));
  1262.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1263.         GT_SetGadgetAttrsA(GadgetComment,win,NIL,^TagsCHANGES);
  1264.  
  1265.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=RealPrefs.Comment;
  1266.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1267.         GT_SetGadgetAttrsA(GadgetSTRING,win,NIL,^TagsCHANGES);
  1268.  
  1269.         TagsCHANGES[1]:=TagItem(GTCB_Checked,long((RealPrefs.Bool and (long(1) SHL 4))<>0));
  1270.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1271.         GT_SetGadgetAttrsA(GadgetIFF,win,NIL,^TagsCHANGES);
  1272.  
  1273.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=RealPrefs.Typ;
  1274.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1275.         GT_SetGadgetAttrsA(GadgetTyp,win,NIL,^TagsCHANGES);
  1276.  
  1277.         TagsCHANGES[1]:=TagItem(GTCY_Active,long(RealPrefs.BoolFileIn));
  1278.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1279.         GT_SetGadgetAttrsA(GadgetFile,win,NIL,^TagsCHANGES);
  1280.  
  1281.         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=RealPrefs.FileIn;
  1282.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1283.         GT_SetGadgetAttrsA(GadgetIN,win,NIL,^TagsCHANGES)
  1284. END;
  1285.  
  1286. PROCEDURE GetRidOfForOptions(VAR win:p_window);
  1287. BEGIN
  1288.         win^.flags:=win^.flags or WFLG_RMBTRAP;
  1289.         win^.IDCMPFlags:=0;
  1290.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget^.nextgadget:=NIL
  1291. END;
  1292.  
  1293. PROCEDURE GetBackForOptions(VAR win:p_window,GadgetCycle:p_gadget);
  1294. BEGIN
  1295.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget^.nextgadget:=GadgetCycle;
  1296.         win^.IDCMPFlags:=CYCLEIDCMP or CHECKBOXIDCMP or STRINGIDCMP or INTEGERIDCMP or BUTTONIDCMP or IDCMP_CLOSEWINDOW or IDCMP_VANILLAKEY or IDCMP_MENUPICK;
  1297.         win^.flags:=win^.flags xor WFLG_RMBTRAP;
  1298.         RefreshGadgets(win^.FirstGadget,win,NIL);
  1299.         GT_RefreshWindow(win,NIL);
  1300.         DrawBevelLine(win,0,172,416,FALSE,FALSE,DI);
  1301. END;
  1302.  
  1303. PROCEDURE GiveMessageOptions;
  1304. VAR     DidIt   :                               integer;
  1305. BEGIN
  1306.         VariableString:=Introducer;
  1307.         for DidIt:=length(VariableString)+1 to 50 do
  1308.                 VariableString:=VariableString+" ";
  1309.         SetAPen(win^.RPort,DI^.dri_Pens^[TEXTPEN]);
  1310.         Move(win^.RPort,10,182); DidIt:=integer(_Text(win^.RPort,VariableString,50));
  1311. END;
  1312.  
  1313. PROCEDURE PreferencesXSearch FORWARD;
  1314.  
  1315. PROCEDURE Options;
  1316. LABEL   BACK,RepeatHereDate,RepeatHereTime,RepeatHereLength,SimplyOut;
  1317. VAR     win     :                               p_window;
  1318.         winBit  :                               long;
  1319.         ZOM     :                               array [1..4] of word;
  1320.         imsg    :                               p_intuimessage;
  1321.         CG      :                               p_gadget;
  1322.         CurrentGadget:                          p_gadget;
  1323.         NewMenuFields:                          array[1..17] of NewMenu;
  1324.         MenuFields:                             p_Menu;
  1325.         NItem   :                               p_menuitem;
  1326.         NewGadgetFields:                        newgadget;
  1327.         GadgetCycle:                            p_gadget;
  1328.         ContentsCycle:                          array [1..3] of str;
  1329.         GadgetName:                             p_gadget;
  1330.         GadgetPattern:                          p_gadget;
  1331.         GadgetLength:                           p_gadget;
  1332.         Gadgetsmaller:                          p_gadget;
  1333.         Gadgetbigger:                           p_gadget;
  1334.         GadgetBits:                             p_gadget;
  1335.         GadgetBS:                               p_gadget;
  1336.         GadgetDate:                             p_gadget;
  1337.         Gadgetvom1:                             p_gadget;
  1338.         Gadgetvom2:                             p_gadget;
  1339.         Gadgetbis1:                             p_gadget;
  1340.         Gadgetbis2:                             p_gadget;
  1341.         ContentsCommentFile:                    array [1..4] of str;
  1342.         GadgetComment:                          p_gadget;
  1343.         GadgetSTRING:                           p_gadget;
  1344.         GadgetIFF:                              p_gadget;
  1345.         GadgetTyp:                              p_gadget;
  1346.         GadgetFile:                             p_gadget;
  1347.         GadgetIN:                               p_gadget;
  1348.         GadgetOK:                               p_gadget;
  1349.         GadgetEND:                              p_gadget;
  1350.         BoolComment,BoolFileIn:                 short;
  1351.         TagsCHANGES:                            array [1..13] of TagItem;
  1352.         SI      :                               p_StringInfo;
  1353.         CDT     :                               DateTimeFormat;
  1354.         SIGNAL  :                               long;
  1355.         dummy   :                               boolean;
  1356.         safety  :                               integer;
  1357.         ChosenMenu:                             long;
  1358.         MenuContinue:                           boolean;
  1359.         ChangeASG,BackASG:                      array [0..1] of Byte;
  1360.         ApplicationPort:                        p_MsgPort;
  1361.         AppBit  :                               long;
  1362.         ApplicationMessage:                     p_AppMessage;
  1363.         ApplicationWindow:                      p_AppWindow;
  1364.         ApplicationCounter:                     integer;
  1365. BEGIN
  1366.         GadgetCycle:=CreateContext(^CG);
  1367.         ChangeASG[0]:=DI^.dri_Pens^[SHADOWPEN];
  1368.         ChangeASG[1]:=DI^.dri_Pens^[SHINEPEN];
  1369.         if ChangeASG[0]=ChangeASG[1] then
  1370.                 ChangeASG[0]:=DI^.dri_Pens^[FILLTEXTPEN];
  1371.         BoolComment:=PCA.BoolComment;
  1372.         BoolFileIn:=PCA.BoolFileIn;
  1373.  
  1374.         ContentsCycle[1]:="Options";
  1375.         ContentsCycle[2]:="Places";
  1376.         ContentsCycle[3]:=NIL;
  1377.         TagsCHANGES[1].ti_Tag:=GTCY_Labels;
  1378.         TagsCHANGES[1].ti_Data:=ContentsCycle;
  1379.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1380.         NewGadgetFields:=NewGadget(137,5,150,12,NIL,^tattr,1,0,VI,NIL);
  1381.         GadgetCycle:=CreateGadgetA(CYCLE_KIND,CG,^NewGadgetFields,
  1382.                 ^TagsCHANGES);
  1383.  
  1384.         if (PCA.Bool and 1)<>0 then dummy:=TRUE else dummy:=FALSE;
  1385.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1386.         TagsCHANGES[2]:=TagItem(GTCB_Checked,long(dummy));
  1387.         TagsCHANGES[3].ti_Tag:=TAG_END;
  1388.         NewGadgetFields:=NewGadget(10,22,0,0,"_Name:",^tattr,2,PLACETEXT_RIGHT,
  1389.                 VI,NIL);
  1390.         GadgetName:=CreateGadgetA(CHECKBOX_KIND,GadgetCycle,^NewGadgetFields,
  1391.                 ^TagsCHANGES);
  1392.  
  1393.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1394.         TagsCHANGES[2]:=TagItem(GTST_MaxChars,256);
  1395.         TagsCHANGES[3].ti_Tag:=GTST_String; TagsCHANGES[3].ti_Data:=PCA.Pattern;
  1396.         TagsCHANGES[4].ti_Tag:=TAG_END;
  1397.         NewGadgetFields:=NewGadget(160,22,244,12,"_Pattern",^tattr,3,PLACETEXT_LEFT,
  1398.                 VI,NIL);
  1399.         GadgetPattern:=CreateGadgetA(STRING_KIND,GadgetName,^NewGadgetFields,
  1400.                 ^TagsCHANGES);
  1401.  
  1402.         if (PCA.Bool and (long(1) SHL 1))<>0 then dummy:=TRUE else dummy:=FALSE;
  1403.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1404.         TagsCHANGES[2]:=TagItem(GTCB_Checked,long(dummy));
  1405.         TagsCHANGES[3].ti_Tag:=TAG_END;
  1406.         NewGadgetFields:=NewGadget(10,36,0,0,"_Length:",^tattr,4,PLACETEXT_RIGHT,
  1407.                 VI,NIL);
  1408.         GadgetLength:=CreateGadgetA(CHECKBOX_KIND,GadgetPattern,^NewGadgetFields,
  1409.                 ^TagsCHANGES);
  1410.  
  1411.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1412.         TagsCHANGES[2]:=TagItem(GTIN_Number,PCA.Bigger);
  1413.         TagsCHANGES[3].ti_Tag:=TAG_END;
  1414.         NewGadgetFields:=NewGadget(160,36,100,12,"_>=",^tattr,5,PLACETEXT_LEFT,
  1415.                 VI,NIL);
  1416.         Gadgetbigger:=CreateGadgetA(INTEGER_KIND,GadgetLength,^NewGadgetFields,
  1417.                 ^TagsCHANGES);
  1418.  
  1419.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1420.         TagsCHANGES[2]:=TagItem(GTIN_Number,PCA.Smaller);
  1421.         TagsCHANGES[3].ti_Tag:=TAG_END;
  1422.         NewGadgetFields:=NewGadget(295,36,100,12,"_<=",^tattr,6,PLACETEXT_LEFT,
  1423.                 VI,NIL);
  1424.         Gadgetsmaller:=CreateGadgetA(INTEGER_KIND,Gadgetbigger,^NewGadgetFields,
  1425.                 ^TagsCHANGES);
  1426.  
  1427.         if (PCA.Bool and (long(1) SHL 2))<>0 then dummy:=TRUE else dummy:=FALSE;
  1428.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1429.         TagsCHANGES[2]:=TagItem(GTCB_Checked,long(dummy));
  1430.         TagsCHANGES[3].ti_Tag:=TAG_END;
  1431.         NewGadgetFields:=NewGadget(10,50,0,0,"_Attributes:",^tattr,7,PLACETEXT_RIGHT,
  1432.                 VI,NIL);
  1433.         GadgetBits:=CreateGadgetA(CHECKBOX_KIND,Gadgetsmaller,^NewGadgetFields,
  1434.                 ^TagsCHANGES);
  1435.  
  1436.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1437.         TagsCHANGES[2]:=TagItem(GTST_MaxChars,8);
  1438.         TagsCHANGES[3].ti_Tag:=GTST_String; TagsCHANGES[3].ti_Data:=PCA.Bits;
  1439.         TagsCHANGES[4].ti_Tag:=TAG_END;
  1440.         NewGadgetFields:=NewGadget(182,50,84,12,"_Bits",^tattr,8,PLACETEXT_LEFT,VI,NIL);
  1441.         GadgetBS:=CreateGadgetA(STRING_KIND,GadgetBits,^NewGadgetFields,^TagsCHANGES);
  1442.         SI:=GadgetBS^.SpecialInfo;
  1443.         SI^.Extension^.InitialModes:=SI^.Extension^.InitialModes or SGM_REPLACE or SGM_FIXEDFIELD;
  1444.  
  1445.         if (PCA.Bool and (long(1) SHL 3))<>0 then dummy:=TRUE else dummy:=FALSE;
  1446.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1447.         TagsCHANGES[2]:=TagItem(GTCB_Checked,long(dummy));
  1448.         TagsCHANGES[3].ti_Tag:=TAG_END;
  1449.         NewGadgetFields:=NewGadget(10,64,0,0,"_Time:",^tattr,9,PLACETEXT_RIGHT,
  1450.                 VI,NIL);
  1451.         GadgetDate:=CreateGadgetA(CHECKBOX_KIND,GadgetBS,^NewGadgetFields,
  1452.                 ^TagsCHANGES);
  1453.  
  1454.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1455.         TagsCHANGES[2]:=TagItem(GTST_MaxChars,8);
  1456.         TagsCHANGES[3].ti_Tag:=GTST_String; TagsCHANGES[3].ti_Data:=PCA.Date1;
  1457.         TagsCHANGES[4].ti_Tag:=TAG_END;
  1458.         NewGadgetFields:=NewGadget(160,64,84,12,"_from",^tattr,10,0,VI,NIL);
  1459.         Gadgetvom1:=CreateGadgetA(STRING_KIND,Gadgetdate,^NewGadgetFields,
  1460.                 ^TagsCHANGES);
  1461.  
  1462.         TagsCHANGES[1]:=TagItem(GTST_MaxChars,8);
  1463.         TagsCHANGES[2].ti_Tag:=GTST_String; TagsCHANGES[2].ti_Data:=PCA.Time1;
  1464.         TagsCHANGES[3].ti_Tag:=TAG_END;
  1465.         NewGadgetFields:=NewGadget(246,64,84,12,NIL,^tattr,11,0,VI,NIL);
  1466.         Gadgetvom2:=CreateGadgetA(STRING_KIND,Gadgetvom1,^NewGadgetFields,
  1467.                 ^TagsCHANGES);
  1468.  
  1469.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1470.         TagsCHANGES[2]:=TagItem(GTST_MaxChars,8);
  1471.         TagsCHANGES[3].ti_Tag:=GTST_String; TagsCHANGES[3].ti_Data:=PCA.Date2;
  1472.         TagsCHANGES[4].ti_Tag:=TAG_END;
  1473.         NewGadgetFields:=NewGadget(160,78,84,12,"t_o",^tattr,12,0,VI,NIL);
  1474.         Gadgetbis1:=CreateGadgetA(STRING_KIND,Gadgetvom2,^NewGadgetFields,
  1475.                 ^TagsCHANGES);
  1476.  
  1477.         TagsCHANGES[1]:=TagItem(GTST_MaxChars,8);
  1478.         TagsCHANGES[2].ti_Tag:=GTST_String; TagsCHANGES[2].ti_Data:=PCA.Time2;
  1479.         TagsCHANGES[3].ti_Tag:=TAG_END;
  1480.         NewGadgetFields:=NewGadget(246,78,84,12,NIL,^tattr,13,0,VI,NIL);
  1481.         Gadgetbis2:=CreateGadgetA(STRING_KIND,Gadgetbis1,^NewGadgetFields,
  1482.                 ^TagsCHANGES);
  1483.  
  1484.         ContentsCommentFile[1]:="-";
  1485.         ContentsCommentFile[2]:="G=k";
  1486.         ContentsCommentFile[3]:="G÷k";
  1487.         ContentsCommentFile[4]:=NIL;
  1488.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1489.         TagsCHANGES[2].ti_Tag:=GTCY_Labels;
  1490.         TagsCHANGES[2].ti_Data:=ContentsCommentFile;
  1491.         TagsCHANGES[3]:=TagItem(GTCY_Active,long(BoolComment));
  1492.         TagsCHANGES[4].ti_Tag:=TAG_END;
  1493.         NewGadgetFields:=NewGadget(10,92,60,12,"_Comment:",^tattr,14,PLACETEXT_RIGHT,
  1494.                 VI,NIL);
  1495.         GadgetComment:=CreateGadgetA(CYCLE_KIND,Gadgetbis2,^NewGadgetFields,
  1496.                 ^TagsCHANGES);
  1497.  
  1498.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1499.         TagsCHANGES[2]:=TagItem(GTST_MaxChars,256);
  1500.         TagsCHANGES[3].ti_Tag:=GTST_String; TagsCHANGES[3].ti_Data:=PCA.Comment;
  1501.         TagsCHANGES[4].ti_Tag:=TAG_END;
  1502.         NewGadgetFields:=NewGadget(216,92,188,12,"_String",^tattr,15,PLACETEXT_LEFT,
  1503.                 VI,NIL);
  1504.         GadgetSTRING:=CreateGadgetA(STRING_KIND,GadgetComment,^NewGadgetFields,
  1505.                 ^TagsCHANGES);
  1506.  
  1507.         if (PCA.Bool and (long(1) SHL 4))<>0 then dummy:=TRUE else dummy:=FALSE;
  1508.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1509.         TagsCHANGES[2]:=TagItem(GTCB_Checked,long(dummy));
  1510.         TagsCHANGES[3].ti_Tag:=TAG_END;
  1511.         NewGadgetFields:=NewGadget(10,106,0,0,"_IFF:",^tattr,16,PLACETEXT_RIGHT,
  1512.                 VI,NIL);
  1513.         GadgetIFF:=CreateGadgetA(CHECKBOX_KIND,GadgetSTRING,^NewGadgetFields,
  1514.                 ^TagsCHANGES);
  1515.  
  1516.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1517.         TagsCHANGES[2]:=TagItem(GTST_MaxChars,254);
  1518.         TagsCHANGES[3].ti_Tag:=GTST_String; TagsCHANGES[3].ti_Data:=PCA.Typ;
  1519.         TagsCHANGES[4].ti_Tag:=TAG_END;
  1520.         NewGadgetFields:=NewGadget(160,106,244,12,"T_ype",^tattr,17,PLACETEXT_LEFT,
  1521.                 VI,NIL);
  1522.         GadgetTyp:=CreateGadgetA(STRING_KIND,GadgetIFF,^NewGadgetFields,^TagsCHANGES);
  1523.  
  1524.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1525.         TagsCHANGES[2].ti_Tag:=GTCY_Labels;
  1526.         TagsCHANGES[2].ti_Data:=ContentsCommentFile;
  1527.         TagsCHANGES[3]:=TagItem(GTCY_Active,long(BoolFileIn));
  1528.         TagsCHANGES[4].ti_Tag:=TAG_END;
  1529.         NewGadgetFields:=NewGadget(10,120,60,12,"file-inte_rnal search for:",^tattr,
  1530.                 18,PLACETEXT_RIGHT,VI,NIL);
  1531.         GadgetFile:=CreateGadgetA(CYCLE_KIND,GadgetTyp,^NewGadgetFields,
  1532.                 ^TagsCHANGES);
  1533.  
  1534.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  1535.         TagsCHANGES[2]:=TagItem(GTST_MaxChars,256);
  1536.         TagsCHANGES[3].ti_Tag:=GTST_String; TagsCHANGES[3].ti_Data:=PCA.FileIn;
  1537.         TagsCHANGES[4].ti_Tag:=TAG_END;
  1538.         NewGadgetFields:=NewGadget(160,134,244,12,"Cont_ents:",^tattr,19,PLACETEXT_LEFT,
  1539.                 VI,NIL);
  1540.         GadgetIN:=CreateGadgetA(STRING_KIND,GadgetFile,^NewGadgetFields,^TagsCHANGES);
  1541.  
  1542.         NewGadgetFields:=NewGadget(10,154,100,12,"Search...",^tattr,20,
  1543.                 PLACETEXT_IN,VI,NIL);
  1544.         GadgetOK:=CreateGadgetA(BUTTON_KIND,GadgetIN,^NewGadgetFields,NIL);
  1545.  
  1546.         NewGadgetFields:=NewGadget(344,154,60,12,"Quit",^tattr,21,
  1547.                 PLACETEXT_IN,VI,NIL);
  1548.         GadgetEND:=CreateGadgetA(BUTTON_KIND,GadgetOK,^NewGadgetFields,NIL);
  1549.  
  1550.         if (ChangeASG[0]<>ChangeASG[1]) and (UsedXSP.Coloured=TRUE) then begin
  1551.                 SI:=GadgetPattern^.SpecialInfo;
  1552.                 SI^.Extension^.ActivePens:=ChangeASG;
  1553.                 SI:=Gadgetbigger^.SpecialInfo;
  1554.                 SI^.Extension^.ActivePens:=ChangeASG;
  1555.                 SI:=Gadgetsmaller^.SpecialInfo;
  1556.                 SI^.Extension^.ActivePens:=ChangeASG;
  1557.                 SI:=GadgetBS^.SpecialInfo;
  1558.                 SI^.Extension^.ActivePens:=ChangeASG;
  1559.                 SI:=Gadgetvom1^.SpecialInfo;
  1560.                 SI^.Extension^.ActivePens:=ChangeASG;
  1561.                 SI:=Gadgetvom2^.SpecialInfo;
  1562.                 SI^.Extension^.ActivePens:=ChangeASG;
  1563.                 SI:=Gadgetbis1^.SpecialInfo;
  1564.                 SI^.Extension^.ActivePens:=ChangeASG;
  1565.                 SI:=Gadgetbis2^.SpecialInfo;
  1566.                 SI^.Extension^.ActivePens:=ChangeASG;
  1567.                 SI:=GadgetSTRING^.SpecialInfo;
  1568.                 SI^.Extension^.ActivePens:=ChangeASG;
  1569.                 SI:=GadgetTyp^.SpecialInfo;
  1570.                 SI^.Extension^.ActivePens:=ChangeASG;
  1571.                 SI:=GadgetIN^.SpecialInfo;
  1572.                 SI^.Extension^.ActivePens:=ChangeASG;
  1573.         end;
  1574.  
  1575.         NewMenuFields[1]:=NewMenu(NM_TITLE,0,"Project",NIL,0,0,NIL);
  1576.         NewMenuFields[2]:=NewMenu(NM_ITEM,0,"New","N",0,0,NIL);
  1577.         NewMenuFields[3]:=NewMenu(NM_ITEM,0,"Open...","O",0,0,NIL);
  1578.         NewMenuFields[4]:=NewMenu(NM_ITEM,0,str(NM_BARLABEL),NIL,0,0,NIL);
  1579.         NewMenuFields[5]:=NewMenu(NM_ITEM,0,"Save","S",0,0,NIL);
  1580.         NewMenuFields[6]:=NewMenu(NM_ITEM,0,"Save as...","A",0,0,NIL);
  1581.         NewMenuFields[7]:=NewMenu(NM_ITEM,0,str(NM_BARLABEL),NIL,0,0,NIL);
  1582.         NewMenuFields[8]:=NewMenu(NM_ITEM,0,"Preferences...",NIL,0,0,NIL);
  1583.         NewMenuFields[9]:=NewMenu(NM_ITEM,0,"About...",NIL,0,0,NIL);
  1584.         NewMenuFields[10]:=NewMenu(NM_ITEM,0,"Quit","Q",0,0,NIL);
  1585.         NewMenuFields[11]:=NewMenu(NM_TITLE,0,"Options",NIL,0,0,NIL);
  1586.         NewMenuFields[12]:=NewMenu(NM_ITEM,0,"Standard values",NIL,0,0,NIL);
  1587.         NewMenuFields[13]:=NewMenu(NM_ITEM,0,"out of Project...",NIL,0,0,NIL);
  1588.         NewMenuFields[14]:=NewMenu(NM_ITEM,0,"out of File attributes...",NIL,0,0,NIL);
  1589.         NewMenuFields[15]:=NewMenu(NM_ITEM,0,str(NM_BARLABEL),NIL,0,0,NIL);
  1590.         NewMenuFields[16]:=NewMenu(NM_ITEM,0,"Save as Standard values",NIL,0,0,NIL);
  1591.         NewMenuFields[17].nm_Type:=NM_END;
  1592.         MenuFields:=CreateMenusA(^NewMenuFields,NIL);
  1593.         TagsCHANGES[1].ti_Tag:=GTMN_TextAttr;
  1594.         TagsCHANGES[1].ti_Data:=^tattr;
  1595.         TagsCHANGES[2].ti_Tag:=TAG_END;
  1596.         dummy:=LayoutMenusA(MenuFields,VI,^TagsCHANGES);
  1597.  
  1598.         ZOM[1]:=20;
  1599.         ZOM[2]:=10;
  1600.         ZOM[3]:=350;
  1601.         ZOM[4]:=scr^.font^.ta_Ysize+6;
  1602.         TagsCHANGES[1]:=TagItem(WA_Top,10);
  1603.         TagsCHANGES[2]:=TagItem(WA_Left,20);
  1604.         TagsCHANGES[3]:=TagItem(WA_InnerHeight,186);
  1605.         TagsCHANGES[4]:=TagItem(WA_InnerWidth,416);
  1606.         TagsCHANGES[5]:=TagItem(WA_MouseQueue,0);
  1607.         TagsCHANGES[6]:=TagItem(WA_RptQueue,0);
  1608.         TagsCHANGES[7].ti_Tag:=WA_Title;
  1609.         TagsCHANGES[7].ti_Data:=ProjektXSearch;
  1610.         TagsCHANGES[8]:=TagItem(WA_Flags,WFLG_CLOSEGADGET OR WFLG_DRAGBAR
  1611.                 or WFLG_DEPTHGADGET or WFLG_GIMMEZEROZERO
  1612.                 or WFLG_SMART_REFRESH or WFLG_ACTIVATE or WFLG_HASZOOM);
  1613.         TagsCHANGES[9]:=TagItem(WA_IDCMP,IDCMP_GADGETUP or IDCMP_GADGETDOWN or
  1614.                 IDCMP_NEWSIZE or IDCMP_CLOSEWINDOW or IDCMP_VANILLAKEY or
  1615.                 IDCMP_MENUPICK);
  1616.         TagsCHANGES[10].ti_Tag:=WA_Gadgets;
  1617.         TagsCHANGES[10].ti_Data:=CG^;
  1618.         TagsCHANGES[11]:=TagItem(WA_CustomScreen,long(scr));
  1619.         TagsCHANGES[12].ti_Tag:=WA_Zoom;
  1620.         TagsCHANGES[12].ti_Data:=ZOM;
  1621.         TagsCHANGES[13].ti_Tag:=TAG_END;
  1622.         Win:=OpenWindowTagList(NIL,^TagsCHANGES);
  1623.         winBit:=long(1) shl Win^.userport^.mp_SigBit;
  1624.         SIGNAL:=SetFont(win^.RPort,tfont);
  1625.  
  1626.         DrawBevelLine(win,0,172,416,FALSE,FALSE,DI);
  1627.         dummy:=SetMenuStrip(win,MenuFields);
  1628.         GT_RefreshWindow(win,NIL);
  1629.         ApplicationPort:=CreatePort("XSearch AppPort",0);
  1630.         AppBit:=long(1) shl ApplicationPort^.mp_SigBit;
  1631.         ApplicationWindow:=AddAppWindowA(1,0,win,ApplicationPort,NIL);
  1632.  
  1633.         imsg:=NIL;
  1634.         MenuContinue:=FALSE;
  1635.         ApplicationCounter:=0;
  1636.  
  1637.         if BeginString<>"" then begin GiveMessageOptions(BeginString,win,DI); BeginString:="" end;
  1638.  
  1639.         BACK:
  1640.         EndExit:=-1;
  1641.         SIGNAL:=0;
  1642.  
  1643.         repeat
  1644.                 if (MenuContinue=FALSE) and (ApplicationCounter=0) then begin
  1645.                         imsg:=GT_GetIMsg(win^.userport);
  1646.                         GT_ReplyIMsg(imsg);
  1647.                         if imsg=NIL then begin
  1648.                                 SIGNAL:=_wait(AppBit or winBit);
  1649.                                 if SIGNAL=winBit then begin
  1650.                                         imsg:=GT_GetIMsg(win^.userport);
  1651.                                         GT_ReplyIMsg(imsg)
  1652.                                 end
  1653.                         end else
  1654.                                 SIGNAL:=winBit;
  1655.                 end;
  1656.                 if MenuContinue=TRUE then begin
  1657.                         case ChosenMenu and $1f of
  1658.                                 0:      begin
  1659.                                         case (ChosenMenu and $7e0) div 32 of
  1660.                                                 0:      EndExit:=50
  1661.                                                 1:      EndExit:=51
  1662.                                                 3:      EndExit:=52
  1663.                                                 4:      EndExit:=53
  1664.                                                 6:      begin
  1665.                                                         WaitPointer(win);
  1666.                                                         GetRidOfForOptions(win);
  1667.                                                         PreferencesXSearch;
  1668.                                                         GetBackForOptions(win,CG);
  1669.                                                         if (ChangeASG[0]<>ChangeASG[1]) and (UsedXSP.Coloured=TRUE) then BackASG:=ChangeASG else begin SI:=GadgetPattern^.SpecialInfo; BackASG:=SI^.Extension^.Pens end;
  1670.                                                         SI:=GadgetPattern^.SpecialInfo;
  1671.                                                         SI^.Extension^.ActivePens:=BackASG;
  1672.                                                         SI:=Gadgetbigger^.SpecialInfo;
  1673.                                                         SI^.Extension^.ActivePens:=BackASG;
  1674.                                                         SI:=Gadgetsmaller^.SpecialInfo;
  1675.                                                         SI^.Extension^.ActivePens:=BackASG;
  1676.                                                         SI:=GadgetBS^.SpecialInfo;
  1677.                                                         SI^.Extension^.ActivePens:=BackASG;
  1678.                                                         SI:=Gadgetvom1^.SpecialInfo;
  1679.                                                         SI^.Extension^.ActivePens:=BackASG;
  1680.                                                         SI:=Gadgetvom2^.SpecialInfo;
  1681.                                                         SI^.Extension^.ActivePens:=BackASG;
  1682.                                                         SI:=Gadgetbis1^.SpecialInfo;
  1683.                                                         SI^.Extension^.ActivePens:=BackASG;
  1684.                                                         SI:=Gadgetbis2^.SpecialInfo;
  1685.                                                         SI^.Extension^.ActivePens:=BackASG;
  1686.                                                         SI:=GadgetSTRING^.SpecialInfo;
  1687.                                                         SI^.Extension^.ActivePens:=BackASG;
  1688.                                                         SI:=GadgetTyp^.SpecialInfo;
  1689.                                                         SI^.Extension^.ActivePens:=BackASG;
  1690.                                                         SI:=GadgetIN^.SpecialInfo;
  1691.                                                         SI^.Extension^.ActivePens:=BackASG;
  1692.                                                         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=PCA.Date1;
  1693.                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  1694.                                                         GT_SetGadgetAttrsA(Gadgetvom1,win,NIL,^TagsCHANGES);
  1695.                                                         TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=PCA.Date2;
  1696.                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  1697.                                                         GT_SetGadgetAttrsA(Gadgetbis1,win,NIL,^TagsCHANGES);
  1698.  
  1699.                                                         NormalPointer(win);
  1700.                                                 end
  1701.                                                 7:      begin
  1702.                                                         WaitPointer(win);
  1703.                                                         GetRidOfForOptions(win);
  1704.                                                         AboutXSearch;
  1705.                                                         GetBackForOptions(win,CG);
  1706.                                                         NormalPointer(win);
  1707.                                                 end
  1708.                                                 8:      EndExit:=0
  1709.                                                 else
  1710.                                         end
  1711.                                 end
  1712.                                 1:      begin
  1713.                                         case (ChosenMenu and $7e0) div 32 of
  1714.                                                 0:      EndExit:=-50
  1715.                                                 1:      EndExit:=54
  1716.                                                 2:      EndExit:=55
  1717.                                                 4:      EndExit:=-52
  1718.                                                 else
  1719.                                         end
  1720.                                 end
  1721.                                 else
  1722.                         end;
  1723.                         NItem:=ItemAddress(MenuFields,ChosenMenu);
  1724.                         ChosenMenu:=NItem^.nextselect;
  1725.                         if (ChosenMenu=MENUNULL) or (ChosenMenu=$F8) then MenuContinue:=FALSE;
  1726.                 end;
  1727.                 if (SIGNAL=long(1) SHL win^.userport^.mp_sigBit) then begin
  1728.                         case imsg^.class of
  1729.                                 IDCMP_CLOSEWINDOW:
  1730.                                         EndExit:=0
  1731.                                 IDCMP_NEWSIZE: begin
  1732.                                         DrawBevelLine(win,0,172,416,FALSE,FALSE,DI);
  1733.                                         GT_RefreshWindow(win,NIL)
  1734.                                 end
  1735.                                 IDCMP_VANILLAKEY: begin
  1736.                                         if imsg^.code=99 then begin
  1737.                                                 case BoolComment of
  1738.                                                                 0:      BoolComment:=1
  1739.                                                                 1:      BoolComment:=2
  1740.                                                                 else    BoolComment:=0
  1741.                                                 end;
  1742.                                                 TagsCHANGES[1]:=TagItem(GTCY_Active,BoolComment);
  1743.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  1744.                                                 GT_SetGadgetAttrsA(GadgetComment,win,NIL,^TagsCHANGES);
  1745.                                                 goto BACK
  1746.                                         end;
  1747.                                         if imsg^.code=114 then begin
  1748.                                                 case BoolFileIn of
  1749.                                                                 0:      BoolFileIn:=1
  1750.                                                                 1:      BoolFileIn:=2
  1751.                                                                 else    BoolFileIn:=0
  1752.                                                 end;
  1753.                                                 TagsCHANGES[1]:=TagItem(GTCY_Active,BoolFileIn);
  1754.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  1755.                                                 GT_SetGadgetAttrsA(GadgetFile,win,NIL,^TagsCHANGES);
  1756.                                                 goto BACK
  1757.                                         end;
  1758.                                         if imsg^.code>96 then imsg^.code:=imsg^.code-32;
  1759.                                         case imsg^.code of
  1760.                                                 32:     EndExit:=2
  1761.                                                 13:     EndExit:=1
  1762.                                                 27:     EndExit:=0
  1763.                                                 80:     dummy:=activategadget(GadgetPattern,win,nil)
  1764.                                                 62:     dummy:=activategadget(Gadgetbigger,win,nil)
  1765.                                                 60:     dummy:=activategadget(Gadgetsmaller,win,nil)
  1766.                                                 66:     dummy:=activategadget(GadgetBS,win,nil)
  1767.                                                 70:     dummy:=activategadget(Gadgetvom1,win,nil)
  1768.                                                 79:     dummy:=activategadget(Gadgetbis1,win,nil)
  1769.                                                 83:     dummy:=activategadget(GadgetSTRING,win,nil)
  1770.                                                 89:     dummy:=activategadget(GadgetTyp,win,nil)
  1771.                                                 69:     dummy:=activategadget(GadgetIN,win,nil)
  1772.                                                 78:     begin TagsCHANGES[1]:=TagItem(GTCB_Checked,long(NOT(GadgetName^.flags and GFLG_Selected<>0))); TagsCHANGES[2].ti_Tag:=TAG_END;
  1773.                                                         GT_SetGadgetAttrsA(GadgetName,win,NIL,^TagsCHANGES) end;
  1774.                                                 76:     begin TagsCHANGES[1]:=TagItem(GTCB_Checked,long(NOT(GadgetLength^.flags and GFLG_Selected<>0))); TagsCHANGES[2].ti_Tag:=TAG_END;
  1775.                                                         GT_SetGadgetAttrsA(GadgetLength,win,NIL,^TagsCHANGES) end;
  1776.                                                 65:     begin TagsCHANGES[1]:=TagItem(GTCB_Checked,long(NOT(GadgetBITS^.flags and GFLG_Selected<>0))); TagsCHANGES[2].ti_Tag:=TAG_END;
  1777.                                                         GT_SetGadgetAttrsA(GadgetBITS,win,NIL,^TagsCHANGES) end;
  1778.                                                 84:     begin TagsCHANGES[1]:=TagItem(GTCB_Checked,long(NOT(GadgetDate^.flags and GFLG_Selected<>0))); TagsCHANGES[2].ti_Tag:=TAG_END;
  1779.                                                         GT_SetGadgetAttrsA(GadgetDate,win,NIL,^TagsCHANGES) end;
  1780.                                                 67:     begin case BoolComment of
  1781.                                                                 0:      BoolComment:=2
  1782.                                                                 1:      BoolComment:=0
  1783.                                                                 else    BoolComment:=1
  1784.                                                         end;
  1785.                                                         TagsCHANGES[1]:=TagItem(GTCY_Active,BoolComment);
  1786.                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  1787.                                                         GT_SetGadgetAttrsA(GadgetComment,win,NIL,^TagsCHANGES)
  1788.                                                 end;
  1789.                                                 73:     begin TagsCHANGES[1]:=TagItem(GTCB_Checked,long(NOT(GadgetIFF^.flags and GFLG_Selected<>0))); TagsCHANGES[2].ti_Tag:=TAG_END;
  1790.                                                         GT_SetGadgetAttrsA(GadgetIFF,win,NIL,^TagsCHANGES) end;
  1791.                                                 82:     begin case BoolFileIn of
  1792.                                                                 0:      BoolFileIn:=2
  1793.                                                                 1:      BoolFileIn:=0
  1794.                                                                 else    BoolFileIn:=1
  1795.                                                         end;
  1796.                                                         TagsCHANGES[1]:=TagItem(GTCY_Active,BoolFileIn);
  1797.                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  1798.                                                         GT_SetGadgetAttrsA(GadgetFile,win,NIL,^TagsCHANGES)
  1799.                                                 end;
  1800.                                                 otherwise;
  1801.                                         end;
  1802.                                         if NOT ((imsg^.code=32) or (imsg^.code=27) or (imsg^.code=13)) then saved:=FALSE
  1803.                                 end;
  1804.                                 IDCMP_GADGETUP: begin
  1805.                                         CurrentGadget:=imsg^.iaddress;
  1806.                                         case CurrentGadget^.gadgetid of
  1807.                                                 14:     BoolComment:=imsg^.code
  1808.                                                 18:     BoolFileIn:=imsg^.code
  1809.                                                 1:      EndExit:=2
  1810.                                                 3:      EndExit:=3
  1811.                                                 5:      EndExit:=5
  1812.                                                 6:      EndExit:=6
  1813.                                                 8:      EndExit:=8
  1814.                                                 10:     EndExit:=10
  1815.                                                 11:     EndExit:=11
  1816.                                                 12:     EndExit:=12
  1817.                                                 13:     EndExit:=13
  1818.                                                 15:     EndExit:=15
  1819.                                                 17:     EndExit:=17
  1820.                                                 19:     EndExit:=19
  1821.                                                 20:     EndExit:=1
  1822.                                                 21:     EndExit:=0
  1823.                                                 otherwise
  1824.                                         end;
  1825.                                         if NOT ((CurrentGadget^.gadgetid=21) or (CurrentGadget^.gadgetid=20) or (CurrentGadget^.gadgetid=1)) then saved:=FALSE
  1826.                                 end;
  1827.                                 IDCMP_MENUPICK: begin ChosenMenu:=imsg^.code; MenuContinue:=TRUE; SIGNAL:=-1 end
  1828.                                 else
  1829.                         end
  1830.                 end;
  1831.                 if (SIGNAL=AppBit) or (ApplicationCounter>0) then begin
  1832.                         if ApplicationCounter=0 then begin
  1833.                                 ApplicationMessage:=p_AppMessage(GetMsg(ApplicationPort));
  1834.                                 if ApplicationMessage^.am_Type<>MTYPE_APPWINDOW then goto SimplyOut;
  1835.                                 if ApplicationMessage^.am_NumArgs<1 then goto SimplyOut;
  1836.                                 ApplicationCounter:=1
  1837.                         end;
  1838.                         if ApplicationMessage^.am_ArgList^[ApplicationCounter].wa_Name="" then begin
  1839.                                 SIGNAL:=NameFromLock(ApplicationMessage^.am_ArgList^[ApplicationCounter].wa_Lock,VariableString,257);
  1840.                                 if VariableString[length(VariableString)]<>":" then VariableString:=FilePart(VariableString);
  1841.                                 GiveError("IconDrop - ["+VariableString+"]","You can't drag 'n drop directory icons"+LF+"in this window.",win);
  1842.                                 goto SimplyOut
  1843.                         end;
  1844.                         if ApplicationMessage^.am_ArgList^[ApplicationCounter].wa_Lock=0 then begin
  1845.                                 GiveError("IconDrop - ["+ApplicationMessage^.am_ArgList^[ApplicationCounter].wa_Name+"]","The icon couldn't have been read.",win);
  1846.                                 goto SimplyOut
  1847.                         end;
  1848.                         SIGNAL:=NameFromLock(ApplicationMessage^.am_ArgList^[ApplicationCounter].wa_Lock,VariableString,257);
  1849.                         Dummy:=AddPart(VariableString,ApplicationMessage^.am_ArgList^[ApplicationCounter].wa_Name,364);
  1850.                         ProjektName:=ApplicationMessage^.am_ArgList^[ApplicationCounter].wa_Name;
  1851.                         EndExit:=-55;
  1852.                         SimplyOut:
  1853.                         if ApplicationCounter=ApplicationMessage^.am_NumArgs then begin
  1854.                                 ApplicationCounter:=0;
  1855.                                 ReplyMsg(p_Message(ApplicationMessage))
  1856.                         end else
  1857.                                 ApplicationCounter:=ApplicationCounter+1
  1858.                 end
  1859.         until EndExit<>-1;
  1860.  
  1861.         safety:=EndExit;
  1862.  
  1863.         if (EndExit=54) or (abs(EndExit)=55) or (abs(EndExit)=50) or
  1864.                 (EndExit=51) or (abs(EndExit)=52) or (EndExit=0) or
  1865.                 (EndExit=1) or (EndExit=2) or (EndExit=53) then
  1866.                 BackupOptions(PCA,GadgetName,GadgetPattern,GadgetLength,
  1867.                         Gadgetbigger,Gadgetsmaller,GadgetBits,GadgetBS,GadgetDate,
  1868.                         Gadgetvom1,Gadgetvom2,Gadgetbis1,Gadgetbis2,GadgetSTRING,
  1869.                         GadgetIFF,GadgetTyp,GadgetIN,BoolComment,BoolFileIn);
  1870.  
  1871.         if (EndExit=54) or (abs(EndExit)=55) then begin
  1872.                 WaitPointer(win);
  1873.                 GetRidOfForOptions(win);
  1874.                 if EndExit=54 then Dummy:=FileProjekt(2,win);
  1875.                 if EndExit=55 then Dummy:=FileProjekt(3,win);
  1876.                 if Dummy=TRUE then begin
  1877.                         case EndExit of
  1878.                                 54:     if ProjektDir[length(ProjektDir)]=":" then
  1879.                                                 Dummy:=ReadPrefs(ProjektDir+ProjektName,PCA,win,TRUE,SearchList,TRUE)
  1880.                                         else
  1881.                                                 Dummy:=ReadPrefs(ProjektDir+"/"+ProjektName,PCA,win,TRUE,SearchList,TRUE)
  1882.                                 55:     if ProjektDir[length(ProjektDir)]=":" then
  1883.                                                 Dummy:=ReadPrefsOutOfFile(ProjektDir+ProjektName,PCA,win)
  1884.                                         else
  1885.                                                 Dummy:=ReadPrefsOutOfFile(ProjektDir+"/"+ProjektName,PCA,win)
  1886.                                 (-55):  Dummy:=ReadPrefsOutOfFile(VariableString,PCA,win)
  1887.                                 else
  1888.                         end;
  1889.                         GetBackForOptions(win,CG);
  1890.                         if Dummy=TRUE then begin
  1891.                                 RestoreOptions(PCA,GadgetName,GadgetPattern,GadgetLength,
  1892.                                         Gadgetbigger,Gadgetsmaller,GadgetBits,GadgetBS,GadgetDate,
  1893.                                         Gadgetvom1,Gadgetvom2,Gadgetbis1,Gadgetbis2,GadgetComment,
  1894.                                         GadgetSTRING,GadgetIFF,GadgetTyp,GadgetFile,GadgetIN,win);
  1895.                                 saved:=FALSE;
  1896.                         end;
  1897.                         RestoreProjektNameDir;
  1898.                 end else GetBackForOptions(win,CG);
  1899.                 NormalPointer(win);
  1900.                 goto BACK
  1901.         end;
  1902.  
  1903.         if EndExit<-49 then EndExit:=abs(EndExit);
  1904.  
  1905.         WaitPointer(win);
  1906.  
  1907.         if ((EndExit>-1) and (EndExit<3)) or (EndExit>49) or (EndExit=3) then begin
  1908.                 SI:=GadgetPattern^.SpecialInfo;
  1909.                 VariableStr:=SI^.Buffer;
  1910.                 if VerifyPattern(VariableStr,"Name: ",win,DI)=FALSE then begin
  1911.                         EndExit:=integer(activategadget(GadgetPattern,win,nil));
  1912.                         EndExit:=-2
  1913.                 end;
  1914.         end;
  1915.  
  1916.         if ((EndExit>-1) and (EndExit<3)) or (EndExit>49) or (EndExit=5) or (EndExit=6) then begin
  1917.                 if (EndExit>-1) and (EndExit<3) then EndExit:=-5;
  1918.                 RepeatHereLength:
  1919.                 if abs(EndExit)=5 then SI:=Gadgetbigger^.SpecialInfo else SI:=Gadgetsmaller^.SpecialInfo;
  1920.                 SIGNAL:=SI^.LongInt;
  1921.                 if VerifyLength(SIGNAL,win,DI)=FALSE then begin
  1922.                         if abs(EndExit)=5 then
  1923.                                 EndExit:=integer(activategadget(Gadgetbigger,win,nil))
  1924.                         else
  1925.                                 EndExit:=integer(activategadget(Gadgetsmaller,win,nil));
  1926.                         EndExit:=-2
  1927.                 end;
  1928.         end;
  1929.  
  1930.         if ((EndExit>-1) and (EndExit<3)) or (EndExit>49) or (EndExit=15) then begin
  1931.                 SI:=GadgetSTRING^.SpecialInfo;
  1932.                 VariableStr:=SI^.Buffer;
  1933.                 if VerifyPattern(VariableStr,"Comment: ",win,DI)=FALSE then begin
  1934.                         EndExit:=integer(activategadget(GadgetSTRING,win,nil));
  1935.                         EndExit:=-2
  1936.                 end;
  1937.         end;
  1938.  
  1939.         if ((EndExit>-1) and (EndExit<3)) or (EndExit>49) or (EndExit=19) then begin
  1940.                 SI:=GadgetIN^.SpecialInfo;
  1941.                 VariableStr:=SI^.Buffer;
  1942.                 if VerifyPattern(VariableStr,"File-internals: ",win,DI)=FALSE then begin
  1943.                         EndExit:=integer(activategadget(GadgetIN,win,nil));
  1944.                         EndExit:=-2
  1945.                 end;
  1946.         end;
  1947.  
  1948.         if ((EndExit>-1) and (EndExit<3)) or (EndExit>49) or (EndExit=8) then begin
  1949.                 SI:=GadgetBS^.SpecialInfo;
  1950.                 VariableStr:=SI^.Buffer;
  1951.                 VariableString:=AlienizeBits(VariableStr);
  1952.                 if VerifyBits(VariableString,win,DI)=FALSE then begin
  1953.                         Dummy:=activategadget(GadgetBS,win,nil);
  1954.                         EndExit:=-2
  1955.                 end else begin
  1956.                         VariableStr:=VariableString;
  1957.                         TagsCHANGES[1]:=TagItem(GTST_String,long(VariableStr));
  1958.                         TagsCHANGES[2].ti_Tag:=TAG_END;
  1959.                         GT_SetGadgetAttrsA(GadgetBS,win,NIL,^TagsCHANGES);
  1960.                 end;
  1961.         end;
  1962.  
  1963.         if ((EndExit>-1) and (EndExit<3)) or (EndExit>49) or (EndExit=17) then begin
  1964.                 SI:=GadgetTyp^.SpecialInfo;
  1965.                 VariableStr:=SI^.Buffer;
  1966.                 VariableString:=AlienizeIFF(VariableStr); VariableStr:=VariableString;
  1967.                 TagsCHANGES[1]:=TagItem(GTST_String,long(VariableStr));
  1968.                 TagsCHANGES[2].ti_Tag:=TAG_END;
  1969.                 GT_SetGadgetAttrsA(GadgetTyp,win,NIL,^TagsCHANGES);
  1970.                 if VerifyIFF(VariableStr,win,DI)=FALSE then begin
  1971.                         Dummy:=activategadget(GadgetTyp,win,nil);
  1972.                         EndExit:=-2
  1973.                 end;
  1974.         end;
  1975.  
  1976.         if ((EndExit>-1) and (EndExit<3)) or (EndExit>49) or (EndExit=10) or (EndExit=12) then begin
  1977.                 if ((EndExit>-1) and (EndExit<3)) or (EndExit>49) then EndExit:=-10;
  1978.                 RepeatHereDate:
  1979.                 if abs(EndExit)=10 then SI:=Gadgetvom1^.SpecialInfo else SI:=Gadgetbis1^.SpecialInfo;
  1980.                 VariableStr:=SI^.Buffer;
  1981.                 VariableString:=AlienizeRawTimeDate(VariableStr,FALSE); VariableStr:=VariableString;
  1982.                 TagsCHANGES[1]:=TagItem(GTST_String,long(VariableStr));
  1983.                 TagsCHANGES[2].ti_Tag:=TAG_END;
  1984.                 if abs(EndExit)=10 then
  1985.                         GT_SetGadgetAttrsA(Gadgetvom1,win,NIL,^TagsCHANGES)
  1986.                 else
  1987.                         GT_SetGadgetAttrsA(Gadgetbis1,win,NIL,^TagsCHANGES);
  1988.                 if VerifyRawTimeDate(VariableStr,win,FALSE,DI)=FALSE then begin
  1989.                         if abs(EndExit)=10 then
  1990.                                 Dummy:=activategadget(Gadgetvom1,win,nil)
  1991.                         else
  1992.                                 Dummy:=activategadget(Gadgetbis1,win,nil);
  1993.                         EndExit:=-2
  1994.                 end else begin
  1995.                         VariableString:=AlienizeTimeDate(VariableStr,FALSE); VariableStr:=VariableString;
  1996.                         ConvertTimeDate(VariableStr,FALSE,CDT);
  1997.                         if VerifyDate(CDT,win,DI)=FALSE then begin
  1998.                                 if abs(EndExit)=10 then
  1999.                                         Dummy:=activategadget(Gadgetvom1,win,nil)
  2000.                                 else
  2001.                                         Dummy:=activategadget(Gadgetbis1,win,nil);
  2002.                                 EndExit:=-2
  2003.                         end else begin
  2004.                                 TagsCHANGES[1]:=TagItem(GTST_String,long(VariableStr));
  2005.                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  2006.                                 if abs(EndExit)=10 then
  2007.                                         GT_SetGadgetAttrsA(Gadgetvom1,win,NIL,^TagsCHANGES)
  2008.                                 else
  2009.                                         GT_SetGadgetAttrsA(Gadgetbis1,win,NIL,^TagsCHANGES)
  2010.                         end;
  2011.                 end;
  2012.         end;
  2013.  
  2014.         if ((EndExit>-1) and (EndExit<3)) or (EndExit>49) or (EndExit=11) or (EndExit=13) then begin
  2015.                 if ((EndExit>-1) and (EndExit<3)) or (EndExit>49) then EndExit:=-11;
  2016.                 RepeatHereTime:
  2017.                 if abs(EndExit)=11 then SI:=Gadgetvom2^.SpecialInfo else SI:=Gadgetbis2^.SpecialInfo;
  2018.                 VariableStr:=SI^.Buffer;
  2019.                 VariableString:=AlienizeRawTimeDate(VariableStr,TRUE); VariableStr:=VariableString;
  2020.                 TagsCHANGES[1]:=TagItem(GTST_String,long(VariableStr));
  2021.                 TagsCHANGES[2].ti_Tag:=TAG_END;
  2022.                 if abs(EndExit)=11 then
  2023.                         GT_SetGadgetAttrsA(Gadgetvom2,win,NIL,^TagsCHANGES)
  2024.                 else
  2025.                         GT_SetGadgetAttrsA(Gadgetbis2,win,NIL,^TagsCHANGES);
  2026.                 if VerifyRawTimeDate(VariableStr,win,TRUE,DI)=FALSE then begin
  2027.                         if abs(EndExit)=11 then
  2028.                                 Dummy:=activategadget(Gadgetvom2,win,nil)
  2029.                         else
  2030.                                 Dummy:=activategadget(Gadgetbis2,win,nil);
  2031.                         EndExit:=-2
  2032.                 end else begin
  2033.                         VariableString:=AlienizeTimeDate(VariableStr,TRUE);
  2034.                         VariableStr:=VariableString;
  2035.                         ConvertTimeDate(VariableStr,TRUE,CDT);
  2036.                         if VerifyTime(CDT,win,DI)=FALSE then begin
  2037.                                 if abs(EndExit)=11 then
  2038.                                         Dummy:=activategadget(Gadgetvom2,win,nil)
  2039.                                 else
  2040.                                         Dummy:=activategadget(Gadgetbis2,win,nil);
  2041.                                 EndExit:=-2
  2042.                         end else begin
  2043.                                 TagsCHANGES[1]:=TagItem(GTST_String,long(VariableStr));
  2044.                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  2045.                                 if abs(EndExit)=11 then
  2046.                                         GT_SetGadgetAttrsA(Gadgetvom2,win,NIL,^TagsCHANGES)
  2047.                                 else
  2048.                                         GT_SetGadgetAttrsA(Gadgetbis2,win,NIL,^TagsCHANGES)
  2049.                         end;
  2050.                 end;
  2051.         end;
  2052.  
  2053.         if (EndExit>2) and (EndExit<50) then begin GiveMessageOptions("",win,DI); EndExit:=-2 end;
  2054.  
  2055.         if (EndExit=-2) and (safety=1) then begin
  2056.                 TagsCHANGES[1].ti_Tag:=GTCY_Active;
  2057.                 TagsCHANGES[1].ti_Data:=0;
  2058.                 TagsCHANGES[2].ti_Tag:=TAG_END;
  2059.                 GT_SetGadgetAttrsA(GadgetCycle,win,NIL,^TagsCHANGES);
  2060.         end;
  2061.  
  2062.         if EndExit=-2 then begin NormalPointer(win); goto BACK end;
  2063.         if EndExit=-5 then begin EndExit:=safety; goto RepeatHereLength end;
  2064.         if EndExit=-10 then begin EndExit:=safety; goto RepeatHereDate end;
  2065.         if EndExit=-11 then begin EndExit:=safety; goto RepeatHereTime end;
  2066.  
  2067.         if (abs(EndExit)=50) or (EndExit=51) then begin
  2068.                 if saved=FALSE then begin
  2069.                         case EndExit of
  2070.                                 50:     SIGNAL:=GiveQuestion(ProjektXSearch+" - New","The old project has been changed. Do you"+LF+"really want to start a new one?",
  2071.                                                 "New project|Save, then new project|Cancel",win)
  2072.                                 (-50):  SIGNAL:=GiveQuestion(ProjektXSearch+" - Standard values","The old project has been changed. Do you"+LF+"really want to set the Standard values?",
  2073.                                                 "Standard values|Save, then Standard values|Cancel",win)
  2074.                                 51:     SIGNAL:=GiveQuestion(ProjektXSearch+" - Open project","The old project has been changed. Do you"+LF+"really want to open another?",
  2075.                                                 "Open project|Save, then open project|Cancel",win)
  2076.                                 otherwise
  2077.                         end;
  2078.                         if SIGNAL=2 then
  2079.                                 if WritePrefs(Projekt,PCA,win,SearchList)=FALSE then begin NormalPointer(win); goto BACK end else saved:=TRUE
  2080.                 end else SIGNAL:=1;
  2081.                 if SIGNAL<>0 then begin
  2082.                         if abs(EndExit)=50 then begin
  2083.                                 PCA:=PrefsStandard;
  2084.                                 if UsedXSP.Currency=TRUE then begin
  2085.                                         VariableString:=ConvertCurrentDateTime(NIL,FALSE); VariableStr:=VariableString;
  2086.                                         VariableString:=AlienizeTimeDate(VariableStr,FALSE);
  2087.                                         PCA.Date1:=VariableString; PCA.Date2:=VariableString;
  2088.                                         VariableString:=ConvertCurrentDateTime(NIL,TRUE); VariableStr:=VariableString;
  2089.                                         VariableString:=AlienizeTimeDate(VariableStr,TRUE);
  2090.                                         PCA.Time1:=VariableString; PCA.Time2:=VariableString;
  2091.                                 end;
  2092.                                 RestoreOptions(PCA,GadgetName,GadgetPattern,GadgetLength,
  2093.                                         Gadgetbigger,Gadgetsmaller,GadgetBits,GadgetBS,GadgetDate,
  2094.                                         Gadgetvom1,Gadgetvom2,Gadgetbis1,Gadgetbis2,GadgetComment,
  2095.                                         GadgetSTRING,GadgetIFF,GadgetTyp,GadgetFile,GadgetIN,win);
  2096.                                 if EndExit=50 then begin dummy:=NameProjekt(TRUE); SetWindowTitles(win,ProjektXSearch,str(-1)) end;
  2097.                                 saved:=TRUE;
  2098.                                 SearchNodeV:=p_SearchNode(SearchList^.lh_Head);
  2099.                                 WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  2100.                                         SearchNodeBack:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  2101.                                         Remove(p_Node(^SearchNodeV^.sen_Node));
  2102.                                         dispose(SearchNodeV);
  2103.                                         SearchNodeV:=SearchNodeBack;
  2104.                                 END;
  2105.                         end;
  2106.                         if EndExit=51 then begin
  2107.                                 GetRidOfForOptions(win);
  2108.                                 Dummy:=FileProjekt(0,win);
  2109.                                 GetBackForOptions(win,CG);
  2110.                                 if Dummy=TRUE then begin
  2111.                                         if ProjektDir[length(ProjektDir)]=":" then
  2112.                                                 Dummy:=ReadPrefs(ProjektDir+ProjektName,PCA,win,FALSE,SearchList,TRUE)
  2113.                                         else
  2114.                                                 Dummy:=ReadPrefs(ProjektDir+"/"+ProjektName,PCA,win,FALSE,SearchList,TRUE);
  2115.                                         if Dummy=TRUE then begin
  2116.                                                 dummy:=NameProjekt(FALSE);
  2117.                                                 RestoreOptions(PCA,GadgetName,GadgetPattern,GadgetLength,
  2118.                                                         Gadgetbigger,Gadgetsmaller,GadgetBits,GadgetBS,GadgetDate,
  2119.                                                         Gadgetvom1,Gadgetvom2,Gadgetbis1,Gadgetbis2,GadgetComment,
  2120.                                                         GadgetSTRING,GadgetIFF,GadgetTyp,GadgetFile,GadgetIN,win);
  2121.                                                 SetWindowTitles(win,ProjektXSearch,str(-1));
  2122.                                                 saved:=TRUE;
  2123.                                         end else RestoreProjektNameDir
  2124.                                 end;
  2125.                         end;
  2126.                 end
  2127.         end;
  2128.  
  2129.         if abs(EndExit)=52 then begin
  2130.                 if EndExit=52 then
  2131.                         Dummy:=WritePrefs(Projekt,PCA,win,SearchList)
  2132.                 else
  2133.                         Dummy:=WritePrefs("ENVARC:XSearch.Std",PCA,win,NIL);
  2134.                 if Dummy=TRUE then begin
  2135.                         saved:=TRUE;
  2136.                         if EndExit=-52 then PrefsStandard:=PCA
  2137.                 end
  2138.         end;
  2139.  
  2140.         if EndExit=53 then begin
  2141.                 GetRidOfForOptions(win);
  2142.                 Dummy:=FileProjekt(1,win);
  2143.                 GetBackForOptions(win,CG);
  2144.                 if Dummy=TRUE then begin
  2145.                         if ProjektDir[length(ProjektDir)]=":" then
  2146.                                 Dummy:=WritePrefs(ProjektDir+ProjektName,PCA,win,SearchList)
  2147.                         else
  2148.                                 Dummy:=WritePrefs(ProjektDir+"/"+ProjektName,PCA,win,SearchList);
  2149.                         if Dummy=TRUE then begin Dummy:=NameProjekt(FALSE); SetWindowTitles(win,ProjektXSearch,str(-1)); saved:=TRUE end
  2150.                 end else RestoreProjektNameDir
  2151.         end;
  2152.  
  2153.         if abs(EndExit)>49 then begin
  2154.                 NormalPointer(win);
  2155.                 goto BACK
  2156.         end;
  2157.  
  2158.         if saved=FALSE then begin
  2159.                 if EndExit=0 then begin
  2160.                         SIGNAL:=GiveQuestion(ProjektXSearch+" - Quit","The old project has been changed."+LF+"Do you really want to quit?",
  2161.                                 "Quit|Save, then quit|Cancel",win);
  2162.                         if SIGNAL=2 then
  2163.                                 if WritePrefs(Projekt,PCA,win,SearchList)=FALSE then begin NormalPointer(win); goto BACK end else saved:=TRUE;
  2164.                         if SIGNAL=0 then begin NormalPointer(win); goto BACK end
  2165.                 end else
  2166.                         saved:=FALSE;
  2167.         end;
  2168.  
  2169.         Dummy:=RemoveAppWindow(ApplicationWindow);
  2170.         DeletePort(ApplicationPort);
  2171.         CloseWindow(win);
  2172.         FreeMenus(MenuFields);
  2173.         FreeGadgets(CG);
  2174. END;
  2175.  
  2176.  
  2177. FUNCTION GetFileOutOfList(TextList:p_List,howlong:integer):DirString;
  2178. VAR     before  :                               Node;
  2179.         VS      :                               DirString;
  2180.         i       :                               integer;
  2181. BEGIN
  2182.         before:=TextList^.lh_Head^;
  2183.         for i:=0 to howlong-1 do
  2184.                 before:=before.ln_Succ^;
  2185.         VS:=before.ln_Name;
  2186.         GetFileOutOfList:=VS
  2187. END;
  2188.  
  2189. FUNCTION GetTypeOutOfList(TextList:p_List,howlong:integer):byte;
  2190. VAR     before  :                               Node;
  2191.         i       :                               integer;
  2192. BEGIN
  2193.         before:=TextList^.lh_Head^;
  2194.         for i:=0 to howlong-1 do
  2195.                 before:=before.ln_Succ^;
  2196.         GetTypeOutOfList:=before.ln_Pri;
  2197. END;
  2198.  
  2199. PROCEDURE GetRidOfForFiler(VAR win:p_window);
  2200. BEGIN
  2201.         win^.flags:=win^.flags or WFLG_RMBTRAP;
  2202.         win^.IDCMPFlags:=0;
  2203.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget^.nextgadget:=NIL
  2204. END;
  2205.  
  2206. PROCEDURE GetBackForFiler(VAR win:p_window,GadgetCycle:p_gadget);
  2207. BEGIN
  2208.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget^.nextgadget:=GadgetCycle;
  2209.         win^.IDCMPFlags:=IDCMP_CLOSEWINDOW or IDCMP_GADGETUP or IDCMP_GADGETDOWN or IDCMP_MOUSEMOVE or IDCMP_MOUSEBUTTONS or IDCMP_INTUITICKS or IDCMP_VANILLAKEY or IDCMP_NEWSIZE or IDCMP_MENUPICK;
  2210.         if (CurrentDirectory="") or (CS="") then win^.IDCMPFlags:=win^.IDCMPFlags or IDCMP_DISKINSERTED or IDCMP_DISKREMOVED;
  2211.         win^.flags:=win^.flags xor WFLG_RMBTRAP;
  2212.         RefreshGadgets(win^.FirstGadget,win,NIL);
  2213.         GT_RefreshWindow(win,NIL);
  2214.         DrawBevelLine(win,0,189,504,FALSE,FALSE,DI)
  2215. END;
  2216.  
  2217. PROCEDURE GiveMessageFiler(Introducer:DirString,win:p_window,DI:p_DrawInfo);
  2218. VAR     DidIt   :                               integer;
  2219. BEGIN
  2220.         VariableString:=Introducer;
  2221.         if length(VariableString)>60 then
  2222.                 VariableString:=copy(VariableString,1,57)+"..."
  2223.         else
  2224.                 for DidIt:=length(VariableString)+1 to 60 do
  2225.                         VariableString:=VariableString+" ";
  2226.         SetAPen(win^.RPort,DI^.dri_Pens^[TEXTPEN]);
  2227.         Move(win^.RPort,10,199); DidIt:=integer(_Text(win^.RPort,VariableString,60));
  2228. END;
  2229.  
  2230. PROCEDURE Filer;
  2231. LABEL   BACK,OverJump,DontDo,SimplyOut,OutQuick;
  2232. VAR     win     :                               p_window;
  2233.         winBit  :                               long;
  2234.         ZOM     :                               array[1..4] of word;
  2235.         TagsCHANGES:                            array[1..13] of TagItem;
  2236.         CG      :                               p_gadget;
  2237.         CurrentGadget:                          p_gadget;
  2238.         NewMenuFields:                          array[1..11] of NewMenu;
  2239.         MenuFields:                             p_Menu;
  2240.         NewGadgetFields:                        newgadget;
  2241.         ContentsCycle:                          array[1..3] of str;
  2242.         GadgetCycle:                            p_gadget;
  2243.         GadgetDirList:                          p_gadget;
  2244.         GadgetDevs:                             p_gadget;
  2245.         GadgetParent:                           p_gadget;
  2246.         GadgetRoot:                             p_gadget;
  2247.         GadgetDir:                              p_gadget;
  2248.         GadgetPattern:                          p_gadget;
  2249.         GadgetMark:                             p_gadget;
  2250.         GadgetAll:                              p_gadget;
  2251.         GadgetReverse:                          p_gadget;
  2252.         GadgetPlus:                             p_gadget;
  2253.         GadgetSearchList:                       p_gadget;
  2254.         GadgetMinus:                            p_gadget;
  2255.         GadgetAllS:                             p_gadget;
  2256.         GadgetReverseS:                         p_gadget;
  2257.         GadgetInEx:                             p_gadget;
  2258.         GadgetOK:                               p_gadget;
  2259.         GadgetEND:                              p_gadget;
  2260.         SI      :                               p_StringInfo;
  2261.         DidIt   :                               boolean;
  2262.         imsg    :                               p_intuimessage;
  2263.         SIGNAL  :                               long;
  2264.         dummy   :                               long;
  2265.         MyAnchor:                               p_anchorpath;
  2266.         MyString:                               DirString;
  2267.         ChangeASG:                              array[0..1] of Byte;
  2268.         RN      :                               p_RootNode;
  2269.         Inf     :                               p_DosInfo;
  2270.         Lst     :                               p_DevInfo;
  2271.         i       :                               integer;
  2272.         s1,m1,s2,m2,preSelected:                long;
  2273.         ChosenMenu:                             long;
  2274.         MenuContinue:                           boolean;
  2275.         NItem   :                               p_menuitem;
  2276.         ShowingMessage:                         boolean;
  2277.         ApplicationPort:                        p_MsgPort;
  2278.         AppBit  :                               long;
  2279.         ApplicationMessage:                     p_AppMessage;
  2280.         ApplicationWindow:                      p_AppWindow;
  2281. BEGIN
  2282.         GadgetCycle:=CreateContext(^CG);
  2283.         ChangeASG[0]:=DI^.dri_Pens^[SHADOWPEN];
  2284.         ChangeASG[1]:=DI^.dri_Pens^[SHINEPEN];
  2285.         if ChangeASG[0]=ChangeASG[1] then
  2286.                 ChangeASG[0]:=DI^.dri_Pens^[FILLTEXTPEN];
  2287.  
  2288.         new(MyAnchor);
  2289.  
  2290.         ContentsCycle[1]:="Places";
  2291.         ContentsCycle[2]:="Options";
  2292.         ContentsCycle[3]:=NIL;
  2293.         TagsCHANGES[1].ti_Tag:=GTCY_Labels;
  2294.         TagsCHANGES[1].ti_Data:=ContentsCycle;
  2295.         TagsCHANGES[2].ti_Tag:=TAG_END;
  2296.         NewGadgetFields:=NewGadget(181,5,150,12,NIL,^tattr,1,0,VI,NIL);
  2297.         GadgetCycle:=CreateGadgetA(CYCLE_KIND,CG,^NewGadgetFields,
  2298.                 ^TagsCHANGES);
  2299.  
  2300.         TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  2301.         TagsCHANGES[1].ti_Data:=long(TextList);
  2302.         TagsCHANGES[2]:=TagItem(GTLV_ScrollWidth,16);
  2303.         TagsCHANGES[3].ti_Tag:=TAG_END;
  2304.         NewGadgetFields:=NewGadget(10,24,228,100,NIL,^tattr,2,
  2305.                 PLACETEXT_ABOVE,VI,NIL);
  2306.         GadgetDirList:=CreateGadgetA(LISTVIEW_KIND,GadgetCycle,^NewGadgetFields,
  2307.                 ^TagsCHANGES);
  2308.  
  2309.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  2310.         TagsCHANGES[2].ti_Tag:=TAG_END;
  2311.         NewGadgetFields:=NewGadget(66,126,128,12,"D_evices",^tattr,3,PLACETEXT_IN,
  2312.                 VI,NIL);
  2313.         GadgetDevs:=CreateGadgetA(BUTTON_KIND,GadgetDirList,^NewGadgetFields,^TagsCHANGES);
  2314.  
  2315.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  2316.         TagsCHANGES[2].ti_Tag:=TAG_END;
  2317.         NewGadgetFields:=NewGadget(194,126,22,12,"_:",^tattr,4,PLACETEXT_IN,
  2318.                 VI,NIL);
  2319.         GadgetRoot:=CreateGadgetA(BUTTON_KIND,GadgetDevs,^NewGadgetFields,^TagsCHANGES);
  2320.  
  2321.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  2322.         TagsCHANGES[2].ti_Tag:=TAG_END;
  2323.         NewGadgetFields:=NewGadget(216,126,22,12,"_/",^tattr,5,PLACETEXT_IN,
  2324.                 VI,NIL);
  2325.         GadgetParent:=CreateGadgetA(BUTTON_KIND,GadgetRoot,^NewGadgetFields,^TagsCHANGES);
  2326.  
  2327.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  2328.         TagsCHANGES[2]:=TagItem(GTST_MaxChars,256);
  2329.         TagsCHANGES[3].ti_Tag:=GTST_String; TagsCHANGES[3].ti_Data:=CurrentDirectory;
  2330.         TagsCHANGES[4].ti_Tag:=TAG_END;
  2331.         NewGadgetFields:=NewGadget(66,138,172,12,"_Dir",^tattr,6,PLACETEXT_LEFT,
  2332.                 VI,NIL);
  2333.         GadgetDir:=CreateGadgetA(STRING_KIND,GadgetParent,^NewGadgetFields,^TagsCHANGES);
  2334.  
  2335.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  2336.         TagsCHANGES[2]:=TagItem(GTST_MaxChars,256);
  2337.         TagsCHANGES[3].ti_Tag:=GTST_String; TagsCHANGES[3].ti_Data:=MyPattern;
  2338.         TagsCHANGES[4].ti_Tag:=TAG_END;
  2339.         NewGadgetFields:=NewGadget(66,152,172,12,"_Ptt.",^tattr,7,PLACETEXT_LEFT,
  2340.                 VI,NIL);
  2341.         GadgetPattern:=CreateGadgetA(STRING_KIND,GadgetDir,^NewGadgetFields,^TagsCHANGES);
  2342.  
  2343.         TagsCHANGES[1]:=TagItem(GTCB_Checked,long(IDidTheMarking));
  2344.         TagsCHANGES[2].ti_Tag:=TAG_END;
  2345.         NewGadgetFields:=NewGadget(238,68,0,0,NIL,^tattr,8,PLACETEXT_ABOVE,
  2346.                 VI,NIL);
  2347.         GadgetMark:=CreateGadgetA(CHECKBOX_KIND,GadgetPattern,^NewGadgetFields,
  2348.                 ^TagsCHANGES);
  2349.  
  2350.         NewGadgetFields:=NewGadget(238,81,20,11,"·",^tattr,9,PLACETEXT_IN,
  2351.                 VI,NIL);
  2352.         GadgetAll:=CreateGadgetA(BUTTON_KIND,GadgetMark,^NewGadgetFields,NIL);
  2353.  
  2354.         NewGadgetFields:=NewGadget(238,92,20,11,Reverse,^tattr,10,PLACETEXT_IN,
  2355.                 VI,NIL);
  2356.         GadgetReverse:=CreateGadgetA(BUTTON_KIND,GadgetAll,^NewGadgetFields,NIL);
  2357.  
  2358.         NewGadgetFields:=NewGadget(238,105,20,11,"+",^tattr,11,PLACETEXT_IN,
  2359.                 VI,NIL);
  2360.         GadgetPlus:=CreateGadgetA(BUTTON_KIND,GadgetReverse,^NewGadgetFields,NIL);
  2361.  
  2362.         TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  2363.         TagsCHANGES[1].ti_Data:=long(SearchList);
  2364.         TagsCHANGES[2]:=TagItem(GTLV_ScrollWidth,16);
  2365.         TagsCHANGES[3].ti_Tag:=TAG_END;
  2366.         NewGadgetFields:=NewGadget(264,24,228,140,NIL,^tattr,12,
  2367.                 PLACETEXT_ABOVE,VI,NIL);
  2368.         GadgetSearchList:=CreateGadgetA(LISTVIEW_KIND,GadgetPlus,^NewGadgetFields,
  2369.                 ^TagsCHANGES);
  2370.  
  2371.         NewGadgetFields:=NewGadget(244,118,20,11,"-",^tattr,13,PLACETEXT_IN,
  2372.                 VI,NIL);
  2373.         GadgetMinus:=CreateGadgetA(BUTTON_KIND,GadgetSearchList,^NewGadgetFields,NIL);
  2374.  
  2375.         NewGadgetFields:=NewGadget(244,129,20,11,"±",^tattr,14,PLACETEXT_IN,
  2376.                 VI,NIL);
  2377.         GadgetInEx:=CreateGadgetA(BUTTON_KIND,GadgetMinus,^NewGadgetFields,NIL);
  2378.  
  2379.         NewGadgetFields:=NewGadget(244,142,20,11,"·",^tattr,15,PLACETEXT_IN,
  2380.                 VI,NIL);
  2381.         GadgetAllS:=CreateGadgetA(BUTTON_KIND,GadgetInEx,^NewGadgetFields,NIL);
  2382.  
  2383.         NewGadgetFields:=NewGadget(244,153,20,11,Reverse,^tattr,16,PLACETEXT_IN,
  2384.                 VI,NIL);
  2385.         GadgetReverseS:=CreateGadgetA(BUTTON_KIND,GadgetAllS,^NewGadgetFields,NIL);
  2386.  
  2387.         NewGadgetFields:=NewGadget(10,171,100,12,"Search...",^tattr,17,
  2388.                 PLACETEXT_IN,VI,NIL);
  2389.         GadgetOK:=CreateGadgetA(BUTTON_KIND,GadgetReverseS,^NewGadgetFields,NIL);
  2390.  
  2391.         NewGadgetFields:=NewGadget(432,171,60,12,"Quit",^tattr,18,
  2392.                 PLACETEXT_IN,VI,NIL);
  2393.         GadgetEND:=CreateGadgetA(BUTTON_KIND,GadgetOK,^NewGadgetFields,NIL);
  2394.  
  2395.         if (ChangeASG[0]<>ChangeASG[1]) and (UsedXSP.Coloured=TRUE) then begin
  2396.                 SI:=GadgetDir^.SpecialInfo;
  2397.                 SI^.Extension^.ActivePens:=ChangeASG;
  2398.                 SI:=GadgetPattern^.SpecialInfo;
  2399.                 SI^.Extension^.ActivePens:=ChangeASG;
  2400.         end;
  2401.  
  2402.         NewMenuFields[1]:=NewMenu(NM_TITLE,0,"Project",NIL,0,0,NIL);
  2403.         NewMenuFields[2]:=NewMenu(NM_ITEM,0,"New","N",0,0,NIL);
  2404.         NewMenuFields[3]:=NewMenu(NM_ITEM,0,"Open...","O",0,0,NIL);
  2405.         NewMenuFields[4]:=NewMenu(NM_ITEM,0,str(NM_BARLABEL),NIL,0,0,NIL);
  2406.         NewMenuFields[5]:=NewMenu(NM_ITEM,0,"Save","S",0,0,NIL);
  2407.         NewMenuFields[6]:=NewMenu(NM_ITEM,0,"Save as...","A",0,0,NIL);
  2408.         NewMenuFields[7]:=NewMenu(NM_ITEM,0,str(NM_BARLABEL),NIL,0,0,NIL);
  2409.         NewMenuFields[8]:=NewMenu(NM_ITEM,0,"Preferences...",NIL,0,0,NIL);
  2410.         NewMenuFields[9]:=NewMenu(NM_ITEM,0,"About...",NIL,0,0,NIL);
  2411.         NewMenuFields[10]:=NewMenu(NM_ITEM,0,"Quit","Q",0,0,NIL);
  2412.         NewMenuFields[11].nm_Type:=NM_END;
  2413.         MenuFields:=CreateMenusA(^NewMenuFields,NIL);
  2414.         TagsCHANGES[1].ti_Tag:=GTMN_TextAttr;
  2415.         TagsCHANGES[1].ti_Data:=^tattr;
  2416.         TagsCHANGES[2].ti_Tag:=TAG_END;
  2417.         DidIt:=LayoutMenusA(MenuFields,VI,^TagsCHANGES);
  2418.  
  2419.         ZOM[1]:=20;
  2420.         ZOM[2]:=10;
  2421.         ZOM[3]:=350;
  2422.         ZOM[4]:=scr^.font^.ta_Ysize+6;
  2423.         TagsCHANGES[1]:=TagItem(WA_Top,10);
  2424.         TagsCHANGES[2]:=TagItem(WA_Left,20);
  2425.         TagsCHANGES[3]:=TagItem(WA_InnerHeight,203);
  2426.         TagsCHANGES[4]:=TagItem(WA_InnerWidth,504);
  2427.         TagsCHANGES[5].ti_Tag:=WA_Title;
  2428.         TagsCHANGES[5].ti_Data:=ProjektXSearch;
  2429.         TagsCHANGES[6]:=TagItem(WA_Flags,WFLG_CLOSEGADGET or WFLG_GIMMEZEROZERO or
  2430.                 WFLG_ACTIVATE or WFLG_DRAGBAR or WFLG_SMART_REFRESH or
  2431.                 WFLG_DEPTHGADGET);
  2432.         TagsCHANGES[7]:=TagItem(WA_IDCMP,IDCMP_CLOSEWINDOW or IDCMP_GADGETUP or
  2433.                 IDCMP_GADGETDOWN or IDCMP_MOUSEMOVE or IDCMP_MOUSEBUTTONS or
  2434.                 IDCMP_INTUITICKS or IDCMP_VANILLAKEY or IDCMP_NEWSIZE or
  2435.                 IDCMP_MENUPICK);
  2436.         TagsCHANGES[8]:=TagItem(WA_CustomScreen,long(scr));
  2437.         TagsCHANGES[9].ti_Tag:=WA_Gadgets;
  2438.         TagsCHANGES[9].ti_Data:=CG^;
  2439.         TagsCHANGES[10]:=TagItem(WA_MouseQueue,0);
  2440.         TagsCHANGES[11]:=TagItem(WA_RptQueue,0);
  2441.         TagsCHANGES[12].ti_Tag:=WA_Zoom;
  2442.         TagsCHANGES[12].ti_Data:=ZOM;
  2443.         TagsCHANGES[13].ti_Tag:=TAG_END;
  2444.         win:=OpenWindowTagList(NIL,^TagsCHANGES);
  2445.         winBit:=long(1) shl win^.userport^.mp_sigbit;
  2446.         SIGNAL:=SetFont(win^.RPort,tfont);
  2447.  
  2448.         DrawBevelLine(win,0,189,504,FALSE,FALSE,DI);
  2449.         DidIt:=SetMenuStrip(win,MenuFields);
  2450.         GT_RefreshWindow(win,NIL);
  2451.         RefreshGadgets(win^.firstgadget,win,NIL);
  2452.         ApplicationPort:=CreatePort("XSearch AppPort",0);
  2453.         AppBit:=long(1) shl ApplicationPort^.mp_SigBit;
  2454.         ApplicationWindow:=AddAppWindowA(1,0,win,ApplicationPort,NIL);
  2455.  
  2456.         s1:=-1; m1:=-1;
  2457.         MenuContinue:=FALSE;
  2458.         if CurrentDirectory="" then win^.IDCMPFlags:=win^.IDCMPFlags or
  2459.                 IDCMP_DISKREMOVED or IDCMP_DISKINSERTED;
  2460.         if BeginString<>"" then begin
  2461.                 GiveMessageFiler(BeginString,win,DI);
  2462.                 BeginString:="";
  2463.                 ShowingMessage:=TRUE;
  2464.         end;
  2465.         if start=TRUE then begin
  2466.                 EndExit:=35;
  2467.                 start:=FALSE;
  2468.                 goto OverJump
  2469.         end;
  2470.  
  2471.         BACK:
  2472.         EndExit:=-1;
  2473.         ShowingMessage:=FALSE;
  2474.  
  2475.         while EndExit=-1 do begin
  2476.                 if MenuContinue=FALSE then begin
  2477.                         imsg:=GT_GetIMsg(win^.userport);
  2478.                         GT_ReplyIMsg(imsg);
  2479.                         if imsg=NIL then
  2480.                                 if GetMsg(ApplicationPort)<>NIL then
  2481.                                         SIGNAL:=AppBit
  2482.                                 else begin
  2483.                                         SIGNAL:=_wait(winBit or AppBit);
  2484.                                         if SIGNAL=winBit then begin
  2485.                                                 imsg:=GT_GetIMsg(win^.userport);
  2486.                                                 GT_ReplyIMsg(imsg);
  2487.                                         end
  2488.                                 end
  2489.                         else
  2490.                                 SIGNAL:=winBit
  2491.                 end;
  2492.                 if MenuContinue=TRUE then begin
  2493.                         case ChosenMenu and $1f of
  2494.                                 0:      begin
  2495.                                         case (ChosenMenu and $7e0) div 32 of
  2496.                                                 0:      EndExit:=50
  2497.                                                 1:      EndExit:=51
  2498.                                                 3:      EndExit:=52
  2499.                                                 4:      EndExit:=53
  2500.                                                 6:      begin
  2501.                                                         WaitPointer(win);
  2502.                                                         GetRidOfForFiler(win);
  2503.                                                         PreferencesXSearch;
  2504.                                                         GetBackForFiler(win,CG);
  2505.                                                         if (ChangeASG[0]<>ChangeASG[1]) and (UsedXSP.Coloured=TRUE) then begin
  2506.                                                                 SI:=GadgetDir^.SpecialInfo;
  2507.                                                                 SI^.Extension^.ActivePens:=ChangeASG;
  2508.                                                                 SI:=GadgetPattern^.SpecialInfo;
  2509.                                                                 SI^.Extension^.ActivePens:=ChangeASG;
  2510.                                                         end;
  2511.                                                         if UsedXSP.Coloured=FALSE then begin
  2512.                                                                 SI:=GadgetDir^.SpecialInfo;
  2513.                                                                 SI^.Extension^.ActivePens:=SI^.Extension^.Pens;
  2514.                                                                 SI:=GadgetPattern^.SpecialInfo;
  2515.                                                                 SI^.Extension^.ActivePens:=SI^.Extension^.Pens;
  2516.                                                         end;
  2517.                                                         NormalPointer(win);
  2518.                                                 end
  2519.                                                 7:      begin
  2520.                                                         WaitPointer(win);
  2521.                                                         GetRidOfForFiler(win);
  2522.                                                         AboutXSearch;
  2523.                                                         GetBackForFiler(win,CG);
  2524.                                                         NormalPointer(win);
  2525.                                                 end
  2526.                                                 8:      EndExit:=0
  2527.                                                 else
  2528.                                         end
  2529.                                 end
  2530.                                 else
  2531.                         end;
  2532.                         NItem:=ItemAddress(MenuFields,ChosenMenu);
  2533.                         ChosenMenu:=NItem^.nextselect;
  2534.                         if (ChosenMenu=MENUNULL) or (ChosenMenu=$F8) then MenuContinue:=FALSE;
  2535.                 end;
  2536.                 if SIGNAL=winBit then begin
  2537.                         case imsg^.class of
  2538.                                 IDCMP_CLOSEWINDOW:
  2539.                                         EndExit:=0
  2540.                                 IDCMP_NEWSIZE: begin
  2541.                                         GT_RefreshWindow(win,NIL);
  2542.                                         DrawBevelLine(win,0,189,504,FALSE,FALSE,DI);
  2543.                                 end
  2544.                                 IDCMP_VANILLAKEY: begin
  2545.                                         if imsg^.code>96 then imsg^.code:=imsg^.code-32;
  2546.                                         case imsg^.code of
  2547.                                                 69:     begin
  2548.                                                         CurrentDirectory:="";
  2549.                                                         CS:="";
  2550.                                                         EndExit:=35
  2551.                                                 end
  2552.                                                 46:     EndExit:=4
  2553.                                                 58:     EndExit:=4
  2554.                                                 47:     EndExit:=5
  2555.                                                 55:     EndExit:=5
  2556.                                                 68:     DidIt:=activategadget(GadgetDir,win,nil)
  2557.                                                 80:     if CurrentDirectory<>"" then DidIt:=activategadget(GadgetPattern,win,nil)
  2558.                                                 32:     EndExit:=2
  2559.                                                 13:     EndExit:=1
  2560.                                                 27:     EndExit:=0
  2561.                                                 else
  2562.                                         end
  2563.                                 end
  2564.                                 IDCMP_DISKINSERTED: EndExit:=35
  2565.                                 IDCMP_DISKREMOVED: EndExit:=35
  2566.                                 IDCMP_GADGETUP: begin
  2567.                                         CurrentGadget:=imsg^.iaddress;
  2568.                                         case CurrentGadget^.gadgetid of
  2569.                                                 1:      EndExit:=2
  2570.                                                 2:      if (GadgetMark^.flags and GFLG_Selected)<>0 then begin
  2571.                                                                 TextNode:=p_StringNode(TextList^.lh_Head);
  2572.                                                                 FOR i:=1 to imsg^.code do
  2573.                                                                         TextNode:=p_StringNode(TextNode^.stn_Node.ln_Succ);
  2574.                                                                 if TextNode^.stn_String[1]=" " then TextNode^.stn_String[1]:="·" else TextNode^.stn_String[1]:=" ";
  2575.                                                                 GT_SetGadgetAttrsA(GadgetDirList,win,NIL,NIL)
  2576.                                                         end else begin
  2577.                                                                 if GetTypeOutOfList(TextList,imsg^.code)=1 then begin
  2578.                                                                         CS:=CurrentDirectory;
  2579.                                                                         VS:=GetFileOutOfList(TextList,imsg^.code);
  2580.                                                                         VS:=copy(VS,5,length(VS)-4);
  2581.                                                                         if AddPart(CurrentDirectory,VS,256)=FALSE then goto BACK;
  2582.                                                                         EndExit:=35
  2583.                                                                 end
  2584.                                                         end
  2585.                                                 3:      begin
  2586.                                                         CurrentDirectory:="";
  2587.                                                         CS:="";
  2588.                                                         EndExit:=35
  2589.                                                 end
  2590.                                                 4:      EndExit:=4
  2591.                                                 5:      EndExit:=5
  2592.                                                 6:      begin
  2593.                                                         CS:=CurrentDirectory;
  2594.                                                         SI:=GadgetDir^.SpecialInfo;
  2595.                                                         CurrentDirectory:=SI^.Buffer;
  2596.                                                         EndExit:=35
  2597.                                                 end
  2598.                                                 7:      begin
  2599.                                                         SI:=GadgetPattern^.SpecialInfo;
  2600.                                                         MyPattern:=SI^.Buffer;
  2601.                                                         EndExit:=35
  2602.                                                 end
  2603.                                                 8:      EndExit:=8
  2604.                                                 9:      if (GadgetMark^.flags and GFLG_Selected)<>0 then EndExit:=9 else begin TagsCHANGES[1]:=TagItem(GTCB_Checked,long(TRUE)); GT_SetGadgetAttrsA(GadgetMark,win,NIL,^TagsCHANGES); EndExit:=-9 end
  2605.                                                 10:     if (GadgetMark^.flags and GFLG_Selected)<>0 then EndExit:=10 else begin TagsCHANGES[1]:=TagItem(GTCB_Checked,long(TRUE)); GT_SetGadgetAttrsA(GadgetMark,win,NIL,^TagsCHANGES); EndExit:=-9 end
  2606.                                                 11:     if (GadgetMark^.flags and GFLG_Selected)<>0 then begin
  2607.                                                                 WaitPointer(win);
  2608.                                                                 GetRidOfForFiler(win);
  2609.                                                                 TextNode:=p_StringNode(TextList^.lh_Head);
  2610.                                                                 WHILE p_StringNode(TextNode^.stn_Node.ln_Succ)<>NIL DO BEGIN
  2611.                                                                         if TextNode^.stn_String[1]="·" then begin
  2612.                                                                                 New(SearchNodeBack);
  2613.                                                                                 if TextNode^.stn_Node.ln_Pri=1 then begin
  2614.                                                                                         MyString:=CurrentDirectory;
  2615.                                                                                         VS:=copy(TextNode^.stn_String,5,length(TextNode^.stn_String)-4);
  2616.                                                                                         if AddPart(MyString,VS,256)=FALSE then goto BACK;
  2617.                                                                                         SearchNodeBack^.sen_Path:=MyString;
  2618.                                                                                         if UsedXSP.Recursion=TRUE then MyString:="  D "+VS else MyString:="  d "+VS;
  2619.                                                                                         SearchNodeBack^.sen_Node.ln_Pri:=1
  2620.                                                                                 end else begin
  2621.                                                                                         MyString:=CurrentDirectory;
  2622.                                                                                         VS:=copy(TextNode^.stn_String,3,length(TextNode^.stn_String)-2);
  2623.                                                                                         if AddPart(MyString,VS,256)=FALSE then goto BACK;
  2624.                                                                                         SearchNodeBack^.sen_Path:=MyString;
  2625.                                                                                         MyString:="  "+VS;
  2626.                                                                                         SearchNodeBack^.sen_Node.ln_Pri:=0
  2627.                                                                                 end;
  2628.                                                                                 SearchNodeV:=p_SearchNode(SearchList^.lh_Head);
  2629.                                                                                 WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  2630.                                                                                         if SearchNodeV^.sen_Path=SearchNodeBack^.sen_Path then begin dispose(SearchNodeBack); goto DontDo end;
  2631.                                                                                         SearchNodeV:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)
  2632.                                                                                 END;
  2633.                                                                                 PrepareNode(SearchNodeBack,MyString);
  2634.                                                                                 SortInDirList(SearchList,^SearchNodeBack^.sen_Node,3);
  2635.                                                                                 saved:=FALSE
  2636.                                                                         end;
  2637.                                                                         DontDo:
  2638.                                                                         TextNode:=p_StringNode(TextNode^.stn_Node.ln_Succ);
  2639.                                                                 END;
  2640.                                                                 GetBackForFiler(win,CG);
  2641.                                                                 NormalPointer(win);
  2642.                                                                 TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  2643.                                                                 TagsCHANGES[1].ti_Data:=long(SearchList);
  2644.                                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  2645.                                                                 GT_SetGadgetAttrsA(GadgetSearchList,win,NIL,^TagsCHANGES);
  2646.                                                         end else
  2647.                                                                 if CurrentDirectory="" then begin
  2648.                                                                         TagsCHANGES[1]:=TagItem(GTCB_Checked,long(TRUE)); GT_SetGadgetAttrsA(GadgetMark,win,NIL,^TagsCHANGES);
  2649.                                                                         EndExit:=-9
  2650.                                                                 end else begin
  2651.                                                                         New(SearchNodeBack);
  2652.                                                                         SearchNodeBack^.sen_Path:=CurrentDirectory;
  2653.                                                                         if CurrentDirectory[length(CurrentDirectory)]=":" then MyString:=CurrentDirectory else MyString:=FilePart(CurrentDirectory);
  2654.                                                                         if UsedXSP.Recursion=TRUE then MyString:="  D "+MyString else MyString:="  d "+MyString;
  2655.                                                                         SearchNodeV:=p_SearchNode(SearchList^.lh_Head);
  2656.                                                                         WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  2657.                                                                                 if SearchNodeV^.sen_Path=SearchNodeBack^.sen_Path then begin dispose(SearchNodeBack); goto BACK end;
  2658.                                                                                 SearchNodeV:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)
  2659.                                                                         END;
  2660.                                                                         SearchNodeBack^.sen_Node.ln_Pri:=1;
  2661.                                                                         PrepareNode(SearchNodeBack,MyString);
  2662.                                                                         SortInDirList(SearchList,^SearchNodeBack^.sen_Node,3);
  2663.                                                                         saved:=FALSE;
  2664.                                                                         TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  2665.                                                                         TagsCHANGES[1].ti_Data:=long(SearchList);
  2666.                                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  2667.                                                                         GT_SetGadgetAttrsA(GadgetSearchList,win,NIL,^TagsCHANGES);
  2668.                                                                 end
  2669.                                                 12:     begin
  2670.                                                         s2:=s1; m2:=m1;
  2671.                                                         s1:=imsg^.Seconds; m1:=imsg^.Micros;
  2672.                                                         if (DoubleClick(s2,m2,s1,m1)=TRUE) and (imsg^.code=preSelected) then begin
  2673.                                                                 s1:=-1; m1:=-1;
  2674.                                                                 SearchNodeV:=p_SearchNode(SearchList^.lh_Head);
  2675.                                                                 FOR i:=1 to preSelected do
  2676.                                                                         SearchNodeV:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  2677.                                                                 case SearchNodeV^.sen_Node.ln_pri of
  2678.                                                                         0:      CurrentDirectory:=copy(SearchNodeV^.sen_Path,1,length(SearchNodeV^.sen_Path)-length(PathPart(SearchNodeV^.sen_Path)))
  2679.                                                                         1:      CurrentDirectory:=SearchNodeV^.sen_Path
  2680.                                                                 end;
  2681.                                                                 if SearchNodeV^.sen_String[1]=" " then SearchNodeV^.sen_String[1]:="·" else SearchNodeV^.sen_String[1]:=" ";
  2682.                                                                 GT_SetGadgetAttrsA(GadgetSearchList,win,NIL,NIL);
  2683.                                                                 EndExit:=35
  2684.                                                         end else begin
  2685.                                                                 SearchNodeV:=p_SearchNode(SearchList^.lh_Head);
  2686.                                                                 FOR i:=1 to imsg^.code do
  2687.                                                                         SearchNodeV:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  2688.                                                                 VariableString:="Pfad: "+SearchNodeV^.sen_Path;
  2689.                                                                 GiveMessageFiler(VariableString,win,DI);
  2690.                                                                 ShowingMessage:=TRUE;
  2691.                                                                 if SearchNodeV^.sen_String[1]=" " then SearchNodeV^.sen_String[1]:="·" else SearchNodeV^.sen_String[1]:=" ";
  2692.                                                                 GT_SetGadgetAttrsA(GadgetSearchList,win,NIL,NIL);
  2693.                                                                 preSelected:=imsg^.code
  2694.                                                         end
  2695.                                                 end
  2696.                                                 13:     begin
  2697.                                                         SearchNodeV:=p_SearchNode(SearchList^.lh_Head);
  2698.                                                         WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  2699.                                                                 SearchNodeBack:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  2700.                                                                 if SearchNodeV^.sen_String[1]="·" then begin
  2701.                                                                         Remove(p_Node(^SearchNodeV^.sen_Node));
  2702.                                                                         dispose(SearchNodeV);
  2703.                                                                         saved:=FALSE
  2704.                                                                 end;
  2705.                                                                 SearchNodeV:=SearchNodeBack;
  2706.                                                         END;
  2707.                                                         TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  2708.                                                         TagsCHANGES[1].ti_Data:=long(SearchList);
  2709.                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  2710.                                                         GT_SetGadgetAttrsA(GadgetSearchList,win,NIL,^TagsCHANGES)
  2711.                                                 end
  2712.                                                 14:     begin
  2713.                                                         SearchNodeV:=p_SearchNode(SearchList^.lh_Head);
  2714.                                                         WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  2715.                                                                 if (SearchNodeV^.sen_String[1]="·") and (SearchNodeV^.sen_Node.ln_Pri=1) then begin
  2716.                                                                         if SearchNodeV^.sen_String[3]="D" then SearchNodeV^.sen_String[3]:="d" else SearchNodeV^.sen_String[3]:="D";
  2717.                                                                         saved:=FALSE
  2718.                                                                 end;
  2719.                                                                 SearchNodeV:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  2720.                                                         END;
  2721.                                                         GT_SetGadgetAttrsA(GadgetSearchList,win,NIL,NIL)
  2722.                                                 end
  2723.                                                 15:     begin
  2724.                                                         SearchNodeV:=p_SearchNode(SearchList^.lh_Head);
  2725.                                                         WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  2726.                                                                 SearchNodeV^.sen_String[1]:="·";
  2727.                                                                 SearchNodeV:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  2728.                                                         END;
  2729.                                                         GT_SetGadgetAttrsA(GadgetSearchList,win,NIL,NIL)
  2730.                                                 end
  2731.                                                 16:     begin
  2732.                                                         SearchNodeV:=p_SearchNode(SearchList^.lh_Head);
  2733.                                                         WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  2734.                                                                 if SearchNodeV^.sen_String[1]="·" then SearchNodeV^.sen_String[1]:=" " else SearchNodeV^.sen_String[1]:="·";
  2735.                                                                 SearchNodeV:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  2736.                                                         END;
  2737.                                                         GT_SetGadgetAttrsA(GadgetSearchList,win,NIL,NIL)
  2738.                                                 end
  2739.                                                 17:     EndExit:=1
  2740.                                                 18:     EndExit:=0
  2741.                                                 else
  2742.                                         end
  2743.                                 end
  2744.                                 IDCMP_MENUPICK: begin ChosenMenu:=imsg^.code; MenuContinue:=TRUE; SIGNAL:=-1 end
  2745.                                 else
  2746.                         end
  2747.                 end;
  2748.                 if SIGNAL=AppBit then begin
  2749.                         ApplicationMessage:=p_AppMessage(GetMsg(ApplicationPort));
  2750.                         if (ApplicationMessage^.am_Type<>MTYPE_APPWINDOW) or (ApplicationMessage^.am_NumArgs<1) then goto SimplyOut;
  2751.                         WaitPointer(win); GetRidOfForFiler(win);
  2752.                         if NOT ((ApplicationMessage^.am_MouseX-win^.BorderLeft>=10) and (ApplicationMessage^.am_MouseY-win^.BorderTop>=24) and (ApplicationMessage^.am_MouseX-win^.BorderLeft<=238) and (ApplicationMessage^.am_MouseY-win^.BorderTop<=123))
  2753.                                 then begin
  2754.                                 for i:=1 to ApplicationMessage^.am_NumArgs do begin
  2755.                                         if ApplicationMessage^.am_ArgList^[i].wa_Lock=0 then begin
  2756.                                                 GiveError("IconDrop - ["+ApplicationMessage^.am_ArgList^[i].wa_Name+"]","The icon couldn't have been read.",win);
  2757.                                                 goto OutQuick
  2758.                                         end;
  2759.                                         dummy:=NameFromLock(ApplicationMessage^.am_ArgList^[i].wa_Lock,VariableString,256);
  2760.                                         if dummy=0 then begin GiveError ("IconDrop - ["+ApplicationMessage^.am_ArgList^[i].wa_Name+"]","Couldn't have identified the icon.",win); goto OutQuick end;
  2761.                                         if ApplicationMessage^.am_ArgList^[i].wa_Name<>"" then DidIt:=AddPart(VariableString,ApplicationMessage^.am_ArgList^[i].wa_Name,256) else dummy:=long(TRUE);
  2762.                                         if Dummy<>0 then begin
  2763.                                                 SearchNodeV:=p_SearchNode(SearchList^.lh_Head);
  2764.                                                 WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  2765.                                                         if SearchNodeV^.sen_Path=VariableString then goto OutQuick;
  2766.                                                         SearchNodeV:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)
  2767.                                                 END;
  2768.                                                 New(SearchNodeV);
  2769.                                                 SearchNodeV^.sen_Path:=VariableString;
  2770.                                                 if VariableString[length(VariableString)]=":" then MyString:=VariableString else MyString:=FilePart(VariableString);
  2771.                                                 if ApplicationMessage^.am_ArgList^[i].wa_Name="" then begin
  2772.                                                         MyString:="  D "+MyString;
  2773.                                                         SearchNodeV^.sen_Node.ln_Pri:=1
  2774.                                                 end else begin
  2775.                                                         MyString:="  "+MyString;
  2776.                                                         SearchNodeV^.sen_Node.ln_Pri:=0
  2777.                                                 end;
  2778.                                                 PrepareNode(SearchNodeV,MyString);
  2779.                                                 SortInDirList(SearchList,^SearchNodeV^.sen_Node,3)
  2780.                                         end else begin
  2781.                                                 GiveError ("IconDrop - ["+ApplicationMessage^.am_ArgList^[i].wa_Name+"]","The name of the icon's path is too long.",win);
  2782.                                         end;
  2783.                                         OutQuick:
  2784.                                 end;
  2785.                                 GetBackForFiler(win,CG);
  2786.                                 TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  2787.                                 TagsCHANGES[1].ti_Data:=long(SearchList);
  2788.                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  2789.                                 GT_SetGadgetAttrsA(GadgetSearchList,win,NIL,^TagsCHANGES);
  2790.                         end else begin
  2791.                                 if ApplicationMessage^.am_ArgList^[1].wa_Lock=0 then begin
  2792.                                         GiveError("IconDrop - ["+ApplicationMessage^.am_ArgList^[1].wa_Name+"]","The icon couldn't have been read.",win);
  2793.                                         goto SimplyOut
  2794.                                 end;
  2795.                                 dummy:=NameFromLock(ApplicationMessage^.am_ArgList^[1].wa_Lock,VariableString,256);
  2796.                                 if dummy=0 then begin GiveError ("IconDrop - ["+ApplicationMessage^.am_ArgList^[1].wa_Name+"]","Couldn't have identified the icon.",win); goto SimplyOut end;
  2797.                                 CS:=CurrentDirectory;
  2798.                                 CurrentDirectory:=VariableString;
  2799.                                 EndExit:=35;
  2800.                                 GetBackForFiler(win,CG)
  2801.                         end;
  2802.                         SimplyOut:
  2803.                         NormalPointer(win)
  2804.                 end
  2805.         end;
  2806.  
  2807.         if (EndExit=4) and (CurrentDirectory<>"") then begin
  2808.                 if CurrentDirectory[length(CurrentDirectory)]<>":" then begin
  2809.                         repeat
  2810.                                 CurrentDirectory:=copy(CurrentDirectory,1,length(CurrentDirectory)-length(PathPart(CurrentDirectory)))
  2811.                         until CurrentDirectory[length(CurrentDirectory)]=":";
  2812.                         EndExit:=35
  2813.                 end else begin
  2814.                         CurrentDirectory:="";
  2815.                         CS:="";
  2816.                         EndExit:=35
  2817.                 end
  2818.         end;
  2819.  
  2820.         if (EndExit=5) and (CurrentDirectory<>"") then begin
  2821.                 if CurrentDirectory[length(CurrentDirectory)]<>":" then begin
  2822.                         CurrentDirectory:=copy(CurrentDirectory,1,length(CurrentDirectory)-length(PathPart(CurrentDirectory)));
  2823.                         EndExit:=35
  2824.                 end else begin
  2825.                         CurrentDirectory:="";
  2826.                         CS:="";
  2827.                         EndExit:=35
  2828.                 end
  2829.         end;
  2830.  
  2831.         if (EndExit=8) or (EndExit=-9) then
  2832.                 if ((GadgetMark^.flags and GFLG_Selected)<>0) or (EndExit=-9) then begin
  2833.                         TextNode:=p_StringNode(TextList^.lh_Head);
  2834.                         WHILE p_StringNode(TextNode^.stn_Node.ln_Succ)<>NIL DO BEGIN
  2835.                                 if TextNode^.stn_Node.ln_Pri=1 then begin
  2836.                                         TextNode^.stn_String[3]:=TextNode^.stn_String[1];
  2837.                                         TextNode^.stn_String[2]:=" ";
  2838.                                         TextNode^.stn_String[1]:=" ";
  2839.                                 end else
  2840.                                         TextNode^.stn_String:="  "+TextNode^.stn_String;
  2841.                                 TextNode:=p_StringNode(TextNode^.stn_Node.ln_Succ)
  2842.                         END;
  2843.                         if EndExit=-9 then EndExit:=9 else GT_SetGadgetAttrsA(GadgetDirList,win,NIL,NIL);
  2844.                 end else begin
  2845.                         TextNode:=p_StringNode(TextList^.lh_Head);
  2846.                         WHILE p_StringNode(TextNode^.stn_Node.ln_Succ)<>NIL DO BEGIN
  2847.                                 if TextNode^.stn_Node.ln_Pri=1 then begin
  2848.                                         if CurrentDirectory="" then
  2849.                                                 case TextNode^.stn_String[3] of
  2850.                                                         ("D"):  TextNode^.stn_String:="DEV "+copy(TextNode^.stn_String,5,length(TextNode^.stn_String)-4)
  2851.                                                         ("V"):  TextNode^.stn_String:="VOL "+copy(TextNode^.stn_String,5,length(TextNode^.stn_String)-4)
  2852.                                                         ("A"):  TextNode^.stn_String:="ASN "+copy(TextNode^.stn_String,5,length(TextNode^.stn_String)-4)
  2853.                                                 end
  2854.                                         else
  2855.                                                 TextNode^.stn_String:="DIR "+copy(TextNode^.stn_String,5,length(TextNode^.stn_String)-4)
  2856.                                 end else
  2857.                                         TextNode^.stn_String:=copy(TextNode^.stn_String,3,length(TextNode^.stn_String)-2);
  2858.                                 TextNode:=p_StringNode(TextNode^.stn_Node.ln_Succ)
  2859.                         END;
  2860.                         GT_SetGadgetAttrsA(GadgetDirList,win,NIL,NIL);
  2861.                 end;
  2862.  
  2863.         if EndExit=9 then begin
  2864.                 TextNode:=p_StringNode(TextList^.lh_Head);
  2865.                 WHILE p_StringNode(TextNode^.stn_Node.ln_Succ)<>NIL DO BEGIN
  2866.                         TextNode^.stn_String[1]:="·";
  2867.                         TextNode:=p_StringNode(TextNode^.stn_Node.ln_Succ)
  2868.                 END;
  2869.                 GT_SetGadgetAttrsA(GadgetDirList,win,NIL,NIL)
  2870.         end;
  2871.  
  2872.         if EndExit=10 then begin
  2873.                 TextNode:=p_StringNode(TextList^.lh_Head);
  2874.                 WHILE p_StringNode(TextNode^.stn_Node.ln_Succ)<>NIL DO BEGIN
  2875.                         if TextNode^.stn_String[1]=" " then TextNode^.stn_String[1]:="·" else TextNode^.stn_String[1]:=" ";
  2876.                         TextNode:=p_StringNode(TextNode^.stn_Node.ln_Succ)
  2877.                 END;
  2878.                 GT_SetGadgetAttrsA(GadgetDirList,win,NIL,NIL)
  2879.         end;
  2880.  
  2881.         OverJump:
  2882.  
  2883.         WaitPointer(win);
  2884.  
  2885.         if EndExit=35 then begin
  2886.                 TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  2887.                 TagsCHANGES[1].ti_Data:=long(NIL);
  2888.                 TagsCHANGES[2].ti_Tag:=TAG_END;
  2889.                 GT_SetGadgetAttrsA(GadgetDirList,win,NIL,^TagsCHANGES);
  2890.                 GetRidOfForFiler(win);
  2891.                 if CurrentDirectory="" then begin
  2892.                         TextNode:=p_StringNode(TextList^.lh_Head);
  2893.                         WHILE p_StringNode(TextNode^.stn_Node.ln_Succ)<>NIL DO BEGIN
  2894.                                 TextNodeBack:=p_StringNode(TextNode^.stn_Node.ln_Succ);
  2895.                                 Remove(p_Node(^TextNode^.stn_Node));
  2896.                                 dispose(TextNode);
  2897.                                 TextNode:=TextNodeBack;
  2898.                         END;
  2899.                         forbid;
  2900.                         RN:=DB^.dl_Root;
  2901.                         Inf:=p_DosInfo(long(RN^.rn_Info)*4);
  2902.                         Lst:=p_DevInfo(long(Inf^.di_DevInfo)*4);
  2903.                         while ptr(long(Lst)*4)<>NIL do begin
  2904.                                 if Lst^.dvi_GlobVec=0 then begin
  2905.                                         New(TextNode);
  2906.                                         if (GadgetMark^.flags and GFLG_Selected)<>0 then
  2907.                                                 case Lst^.dvi_Type of
  2908.                                                         0:      MyString:="  D "+str(Lst^.dvi_Name*4+1)+":"
  2909.                                                         1:      MyString:="  A "+str(Lst^.dvi_Name*4+1)+":"
  2910.                                                         2:      MyString:="  V "+str(Lst^.dvi_Name*4+1)+":"
  2911.                                                 end
  2912.                                         else
  2913.                                                 case Lst^.dvi_Type of
  2914.                                                         0:      MyString:="DEV "+str(Lst^.dvi_Name*4+1)+":"
  2915.                                                         1:      MyString:="ASN "+str(Lst^.dvi_Name*4+1)+":"
  2916.                                                         2:      MyString:="VOL "+str(Lst^.dvi_Name*4+1)+":"
  2917.                                                 end;
  2918.                                         TextNode^.stn_Node.ln_Pri:=1;
  2919.                                         PrepareNode(TextNode,MyString);
  2920.                                         if (GadgetMark^.flags and GFLG_Selected)<>0 then SortInDirList(TextList,^TextNode^.stn_Node,3) else SortInDirList(TextList,^TextNode^.stn_Node,1);
  2921.                                 end;
  2922.                                 Lst:=p_DevInfo(long(Lst^.dvi_Next)*4);
  2923.                         end;
  2924.                         permit;
  2925.                         GetBackForFiler(win,CG);
  2926.                 end else begin
  2927.                         MyLock:=Lock(CurrentDirectory,SHARED_LOCK);
  2928.                         dummy:=IOErr;
  2929.                         if (MyLock<>0) and (dummy=0) then begin
  2930.                                 LockBack:=CurrentDir(MyLock);
  2931.                                 TextNode:=p_StringNode(TextList^.lh_Head);
  2932.                                 WHILE p_StringNode(TextNode^.stn_Node.ln_Succ)<>NIL DO BEGIN
  2933.                                         TextNodeBack:=p_StringNode(TextNode^.stn_Node.ln_Succ);
  2934.                                         Remove(p_Node(^TextNode^.stn_Node));
  2935.                                         dispose(TextNode);
  2936.                                         TextNode:=TextNodeBack;
  2937.                                 END;
  2938.                                 dummy:=MatchFirst(MyPattern,MyAnchor);
  2939.                                 while dummy=0 do begin
  2940.                                         New(TextNode);
  2941.                                         if MyAnchor^.ap_Info.fib_DirEntryType>0 then begin
  2942.                                                 if (GadgetMark^.flags and GFLG_Selected)<>0 then
  2943.                                                         MyString:="  D "+MyAnchor^.ap_Info.fib_FileName
  2944.                                                 else
  2945.                                                         MyString:="DIR "+MyAnchor^.ap_Info.fib_FileName;
  2946.                                                 TextNode^.stn_Node.ln_Pri:=1
  2947.                                         end else begin
  2948.                                                 if (GadgetMark^.flags and GFLG_Selected)<>0 then MyString:="  "+MyAnchor^.ap_Info.fib_FileName else MyString:=MyAnchor^.ap_Info.fib_FileName;
  2949.                                                 TextNode^.stn_Node.ln_Pri:=0
  2950.                                         end;
  2951.                                         PrepareNode(TextNode,MyString);
  2952.                                         if (GadgetMark^.flags and GFLG_Selected)<>0 then SortInDirList(TextList,^TextNode^.stn_Node,3) else SortInDirList(TextList,^TextNode^.stn_Node,1);
  2953.                                         dummy:=MatchNext(MyAnchor);
  2954.                                 end;
  2955.                                 MatchEnd(MyAnchor);
  2956.                                 UnLock(MyLock);
  2957.                                 GetBackForFiler(win,CG);
  2958.                                 if CS="" then begin
  2959.                                         TagsCHANGES[1].ti_Tag:=GA_Disabled;
  2960.                                         TagsCHANGES[1].ti_Data:=long(FALSE);
  2961.                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  2962.                                         GT_SetGadgetAttrsA(GadgetRoot,win,NIL,^TagsCHANGES);
  2963.                                         TagsCHANGES[1].ti_Tag:=GA_Disabled;
  2964.                                         TagsCHANGES[1].ti_Data:=long(FALSE);
  2965.                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  2966.                                         GT_SetGadgetAttrsA(GadgetParent,win,NIL,^TagsCHANGES);
  2967.                                         TagsCHANGES[1].ti_Tag:=GA_Disabled;
  2968.                                         TagsCHANGES[1].ti_Data:=long(FALSE);
  2969.                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  2970.                                         GT_SetGadgetAttrsA(GadgetPattern,win,NIL,^TagsCHANGES);
  2971.                                         win^.IDCMPFlags:=win^.IDCMPFlags - IDCMP_DISKINSERTED - IDCMP_DISKREMOVED;
  2972.                                 end
  2973.                         end else begin
  2974.                                 GetBackForFiler(win,CG);
  2975.                                 CurrentDirectory:=CS;
  2976.                                 DidIt:=Fault(Dummy,NIL,VariableString,260);
  2977.                                 VariableString:="Error while raeding directory."+LF+"("+VariableString+")";
  2978.                                 GiveMessageFiler(VariableString,win,DI);
  2979.                                 ShowingMessage:=TRUE
  2980.                         end
  2981.                 end;
  2982.                 TagsCHANGES[1].ti_Tag:=GTST_String; TagsCHANGES[1].ti_Data:=CurrentDirectory;
  2983.                 TagsCHANGES[2].ti_Tag:=TAG_END;
  2984.                 SI:=GadgetDir^.SpecialInfo;
  2985.                 SI^.BufferPos:=length(CurrentDirectory);
  2986.                 GT_SetGadgetAttrsA(GadgetDir,win,NIL,^TagsCHANGES);
  2987.                 TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  2988.                 TagsCHANGES[1].ti_Data:=long(TextList);
  2989.                 TagsCHANGES[2].ti_Tag:=TAG_END;
  2990.                 GT_SetGadgetAttrsA(GadgetDirList,win,NIL,^TagsCHANGES);
  2991.                 if CurrentDirectory="" then begin
  2992.                         TagsCHANGES[1].ti_Tag:=GA_Disabled;
  2993.                         TagsCHANGES[1].ti_Data:=long(TRUE);
  2994.                         TagsCHANGES[2].ti_Tag:=TAG_END;
  2995.                         GT_SetGadgetAttrsA(GadgetRoot,win,NIL,^TagsCHANGES);
  2996.                         TagsCHANGES[1].ti_Tag:=GA_Disabled;
  2997.                         TagsCHANGES[1].ti_Data:=long(TRUE);
  2998.                         TagsCHANGES[2].ti_Tag:=TAG_END;
  2999.                         GT_SetGadgetAttrsA(GadgetParent,win,NIL,^TagsCHANGES);
  3000.                         TagsCHANGES[1].ti_Tag:=GA_Disabled;
  3001.                         TagsCHANGES[1].ti_Data:=long(TRUE);
  3002.                         TagsCHANGES[2].ti_Tag:=TAG_END;
  3003.                         GT_SetGadgetAttrsA(GadgetPattern,win,NIL,^TagsCHANGES);
  3004.                         win^.IDCMPFlags:=win^.IDCMPFlags or IDCMP_DISKREMOVED or IDCMP_DISKINSERTED;
  3005.                 end;
  3006.         end;
  3007.  
  3008.         if (EndExit>2) and (EndExit<50) then begin if ShowingMessage=FALSE then GiveMessageFiler("",win,DI); NormalPointer(win); goto BACK end;
  3009.  
  3010.         if (EndExit=50) or (EndExit=51) then begin
  3011.                 if saved=FALSE then begin
  3012.                         case EndExit of
  3013.                                 50:     SIGNAL:=GiveQuestion(ProjektXSearch+" - New","The old project has been changed. Do you"+LF+"really want to start a new one?",
  3014.                                                 "New project|Save, then new project|Cancel",win)
  3015.                                 51:     SIGNAL:=GiveQuestion(ProjektXSearch+" - Open project","The old project has been changed. Do you"+LF+"really want to open another?",
  3016.                                                 "Open project|Save, then open project|Cancel",win)
  3017.                         end;
  3018.                         if SIGNAL=2 then
  3019.                                 if WritePrefs(Projekt,PCA,win,SearchList)=FALSE then begin NormalPointer(win); goto BACK end else saved:=TRUE
  3020.                 end else SIGNAL:=1;
  3021.                 if SIGNAL<>0 then begin
  3022.                         if EndExit=50 then begin
  3023.                                 PCA:=PrefsStandard;
  3024.                                 if UsedXSP.Currency=TRUE then begin
  3025.                                         VariableString:=ConvertCurrentDateTime(NIL,FALSE); VariableStr:=VariableString;
  3026.                                         VariableString:=AlienizeTimeDate(VariableStr,FALSE);
  3027.                                         PCA.Date1:=VariableString; PCA.Date2:=VariableString;
  3028.                                         VariableString:=ConvertCurrentDateTime(NIL,TRUE); VariableStr:=VariableString;
  3029.                                         VariableString:=AlienizeTimeDate(VariableStr,TRUE);
  3030.                                         PCA.Time1:=VariableString; PCA.Time2:=VariableString;
  3031.                                 end;
  3032.                                 didit:=NameProjekt(TRUE); SetWindowTitles(win,ProjektXSearch,str(-1));
  3033.                                 saved:=TRUE;
  3034.                                 SearchNodeV:=p_SearchNode(SearchList^.lh_Head);
  3035.                                 WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  3036.                                         SearchNodeBack:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  3037.                                         Remove(p_Node(^SearchNodeV^.sen_Node));
  3038.                                         dispose(SearchNodeV);
  3039.                                         SearchNodeV:=SearchNodeBack;
  3040.                                 END;
  3041.                                 TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  3042.                                 TagsCHANGES[1].ti_Data:=long(SearchList);
  3043.                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  3044.                                 GT_SetGadgetAttrsA(GadgetSearchList,win,NIL,^TagsCHANGES);
  3045.                         end else begin
  3046.                                 GetRidOfForFiler(win);
  3047.                                 DidIt:=FileProjekt(0,win);
  3048.                                 GetBackForFiler(win,CG);
  3049.                                 if DidIt=TRUE then begin
  3050.                                         if ProjektDir[length(ProjektDir)]=":" then
  3051.                                                 DidIt:=ReadPrefs(ProjektDir+ProjektName,PCA,win,FALSE,SearchList,TRUE)
  3052.                                         else
  3053.                                                 DidIt:=ReadPrefs(ProjektDir+"/"+ProjektName,PCA,win,FALSE,SearchList,TRUE);
  3054.                                         if DidIt=TRUE then begin
  3055.                                                 DidIt:=NameProjekt(FALSE);
  3056.                                                 SetWindowTitles(win,ProjektXSearch,str(-1));
  3057.                                                 TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  3058.                                                 TagsCHANGES[1].ti_Data:=long(SearchList);
  3059.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  3060.                                                 GT_SetGadgetAttrsA(GadgetSearchList,win,NIL,^TagsCHANGES);
  3061.                                                 saved:=TRUE;
  3062.                                         end else RestoreProjektNameDir
  3063.                                 end;
  3064.                         end
  3065.                 end;
  3066.         end;
  3067.  
  3068.         if EndExit=52 then
  3069.                 saved:=WritePrefs(Projekt,PCA,win,SearchList);
  3070.  
  3071.         if EndExit=53 then begin
  3072.                 GetRidOfForFiler(win);
  3073.                 DidIt:=FileProjekt(1,win);
  3074.                 GetBackForFiler(win,CG);
  3075.                 if DidIt=TRUE then begin
  3076.                         if ProjektDir[length(ProjektDir)]=":" then
  3077.                                 DidIt:=WritePrefs(ProjektDir+ProjektName,PCA,win,SearchList)
  3078.                         else
  3079.                                 DidIt:=WritePrefs(ProjektDir+"/"+ProjektName,PCA,win,SearchList);
  3080.                         if DidIt=TRUE then begin DidIt:=NameProjekt(FALSE); SetWindowTitles(win,ProjektXSearch,str(-1)); saved:=TRUE end
  3081.                 end else RestoreProjektNameDir
  3082.         end;
  3083.  
  3084.         if abs(EndExit)>49 then begin
  3085.                 NormalPointer(win);
  3086.                 goto BACK
  3087.         end;
  3088.  
  3089.         if saved=FALSE then begin
  3090.                 if EndExit=0 then begin
  3091.                         SIGNAL:=GiveQuestion(ProjektXSearch+" - Ende","The old project has been changed."+LF+"Do you really want to quit?",
  3092.                                 "Quit|Save, then quit|Cancel",win);
  3093.                         if SIGNAL=2 then
  3094.                                 if WritePrefs(Projekt,PCA,win,SearchList)=FALSE then begin NormalPointer(win); goto BACK end else saved:=TRUE;
  3095.                         if SIGNAL=0 then begin NormalPointer(win); goto BACK end
  3096.                 end else
  3097.                         saved:=FALSE;
  3098.         end;
  3099.  
  3100.         IDidTheMarking:=(GadgetMark^.flags and GFLG_Selected)<>0;
  3101.  
  3102.         CloseWindow(win);
  3103.         FreeMenus(MenuFields);
  3104.         FreeGadgets(CG);
  3105.         dispose(MyAnchor);
  3106.         DidIt:=RemoveAppWindow(ApplicationWindow);
  3107.         DeletePort(ApplicationPort);
  3108. END;
  3109.  
  3110.  
  3111. FUNCTION LaterEntry(Date1,Date2:p_DateStamp):Boolean;
  3112. BEGIN
  3113.         if Date1^.ds_Days<>Date2^.ds_Days then LaterEntry:=Date1^.ds_Days>Date2^.ds_Days else
  3114.                 if Date1^.ds_Minute<>Date2^.ds_Minute then LaterEntry:=Date1^.ds_Minute>Date2^.ds_Minute else
  3115.                         LaterEntry:=Date1^.ds_Tick>Date2^.ds_Tick
  3116. END;
  3117.  
  3118. FUNCTION EarlierEntry(Date1,Date2:p_DateStamp):Boolean;
  3119. BEGIN
  3120.         if Date1^.ds_Days<>Date2^.ds_Days then EarlierEntry:=Date1^.ds_Days<Date2^.ds_Days else
  3121.                 if Date1^.ds_Minute<>Date2^.ds_Minute then EarlierEntry:=Date1^.ds_Minute<Date2^.ds_Minute else
  3122.                         EarlierEntry:=Date1^.ds_Tick<Date2^.ds_Tick
  3123. END;
  3124.  
  3125. PROCEDURE OptimizePrefs;
  3126. VAR     DidIt   :                               long;
  3127.         RST     :                               string[11];
  3128.         i       :                               integer;
  3129.         DT      :                               DateTime;
  3130. BEGIN
  3131.         with PCA_Optimized do begin
  3132.                 Bigger:=PCA.Bigger;
  3133.                 Smaller:=PCA.Smaller;
  3134.                 DoLength:=Bigger>Smaller;
  3135.                 Bits:=0; BitsMask:=0;
  3136.                 for i:=1 to 8 do
  3137.                         if PCA.Bits[i]="*" then BitsMask:=BitsMask or (long(1) SHL (8-i)) else begin
  3138.                                 if i<5 then begin
  3139.                                         if PCA.Bits[i]<>"-" then Bits:=Bits or (long(1) SHL (8-i))
  3140.                                 end else
  3141.                                         if PCA.Bits[i]="-" then Bits:=Bits or (long(1) SHL (8-i))
  3142.                         end;
  3143.                 DT.dat_Format:=FORMAT_CDN;
  3144.                 for i:=1 to 8 do
  3145.                         if PCA.Date1[i]="." then RST[i]:="-" else RST[i]:=PCA.Date1[i];
  3146.                 DT.dat_StrDate:=RST;
  3147.                 DT.dat_StrTime:=PCA.Time1;
  3148.                 DidIt:=StrToDate(^DT);
  3149.                 Date1:=DT.dat_Stamp;
  3150.                 for i:=1 to 8 do
  3151.                         if PCA.Date2[i]="." then RST[i]:="-" else RST[i]:=PCA.Date2[i];
  3152.                 DT.dat_StrDate:=RST;
  3153.                 DT.dat_StrTime:=PCA.Time2;
  3154.                 DidIt:=StrToDate(^DT);
  3155.                 Date2:=DT.dat_Stamp;
  3156.                 DoDate:=LaterEntry(^Date1,^Date2);
  3157.                 DidIt:=ParsePatternNoCase(PCA.Pattern,PreName,769);
  3158.                 case PCA.BoolComment of
  3159.                         1:      DidIt:=ParsePatternNoCase(PCA.Comment,PreComment,769)
  3160.                         2:      DidIt:=ParsePattern(PCA.Comment,PreComment,769)
  3161.                         else
  3162.                 end;
  3163.                 case PCA.BoolFileIn of
  3164.                         1:      DidIt:=ParsePatternNoCase(PCA.FileIn,PreIn,769)
  3165.                         2:      DidIt:=ParsePattern(PCA.FileIn,PreIn,769)
  3166.                         else
  3167.                 end;
  3168.                 PreIFF:=PCA.Typ;
  3169.                 if PreIFF<>"" then begin
  3170.                         NumIFF:=1;
  3171.                         for i:=1 to length(PreIFF) do
  3172.                                 if PreIFF[i]="|" then NumIFF:=NumIFF+1
  3173.                 end;
  3174.                 Switches:=0;
  3175.                 if (PCA.Bool and 1)<>0 then Switches:=1;
  3176.                 if (PCA.Bool and (long(1) SHL 1))<>0 then Switches:=Switches or (long(1) SHL 1);
  3177.                 if (PCA.Bool and (long(1) SHL 2))<>0 then Switches:=Switches or (long(1) SHL 2);
  3178.                 if (PCA.Bool and (long(1) SHL 3))<>0 then Switches:=Switches or (long(1) SHL 3);
  3179.                 if PCA.BoolComment<>0 then Switches:=Switches or (long(1) SHL 4);
  3180.                 if (PCA.Bool and (long(1) SHL 4))<>0 then Switches:=Switches or (long(1) SHL 5);
  3181.                 if PCA.BoolFileIn<>0 then Switches:=Switches or (long(1) SHL 6);
  3182.                 CaseComment:=boolean(PCA.BoolComment-1);
  3183.                 CaseFileIn:=boolean(PCA.BoolFileIn-1);
  3184.         end;
  3185. END;
  3186.  
  3187. FUNCTION CheckEntry(FIB:p_FileInfoBlock,Pfad:DirString,win:p_window,
  3188.         add:boolean):Boolean;
  3189. LABEL   UndTschuess,RausAusDerSchleife,RausAusDerWhile;
  3190. VAR     i       :                               integer;
  3191.         Dummy   :                               long;
  3192.         forIFFIn:                               Text;
  3193.         response:                               string[18];
  3194. BEGIN
  3195.         CheckEntry:=FALSE;
  3196.         with PCA_Optimized do begin
  3197.                 if (Switches and 1)<>0 then
  3198.                         if MatchPatternNoCase(PreName,FIB^.fib_FileName)=FALSE then goto UndTschuess;
  3199.                 if (Switches and (long(1) SHL 1))<>0 then begin
  3200.                         if FIB^.fib_DirEntryType>0 then begin
  3201.                                 if UsedXSP.DirLength=TRUE then goto UndTschuess
  3202.                         end else begin
  3203.                                 if DoLength=FALSE then begin
  3204.                                         if (FIB^.fib_Size<Bigger) or (FIB^.fib_size>Smaller) then goto UndTschuess
  3205.                                 end else
  3206.                                         if (FIB^.fib_Size<Bigger) and (FIB^.fib_size>Smaller) then goto UndTschuess
  3207.                         end
  3208.                 end;
  3209.                 if (Switches and (long(1) SHL 2))<>0 then
  3210.                         for i:=0 to 7 do
  3211.                                 if (BitsMask and (long(1) SHL i))=0 then
  3212.                                         if (Bits and (long(1) SHL i))<>(FIB^.fib_Protection and (long(1) SHL i)) then goto UndTschuess;
  3213.                 if (Switches and (long(1) SHL 3))<>0 then begin
  3214.                         FIB^.fib_Date.ds_Tick:=(FIB^.fib_Date.ds_Tick div 50)*50;
  3215.                         if DoDate=FALSE then begin
  3216.                                 if (LaterEntry(^Date1,^FIB^.fib_Date)=TRUE) or (EarlierEntry(^Date2,^FIB^.fib_Date)=TRUE) then goto UndTschuess
  3217.                         end else
  3218.                                 if (LaterEntry(^Date1,^FIB^.fib_Date)=TRUE) and (EarlierEntry(^Date2,^FIB^.fib_Date)=TRUE) then goto UndTschuess
  3219.                 end;
  3220.                 if (Switches and (long(1) SHL 4))<>0 then begin
  3221.                         if CaseComment=FALSE then begin
  3222.                                 if MatchPatternNoCase(PreComment,FIB^.fib_Comment)=FALSE then goto UndTschuess
  3223.                         end else
  3224.                                 if MatchPattern(PreComment,FIB^.fib_Comment)=FALSE then goto UndTschuess
  3225.                 end;
  3226.                 if ((Switches and (long(1) SHL 5))<>0) or ((Switches and (long(1) SHL 6))<>0) then begin
  3227.                         if FIB^.fib_DirEntryType>0 then begin
  3228.                                 if ((Switches and (long(1) SHL 5))<>0) and (UsedXSP.DirIFF=TRUE) then goto UndTschuess;
  3229.                                 if ((Switches and (long(1) SHL 6))<>0) and (UsedXSP.DirFile=TRUE) then goto UndTschuess
  3230.                         end else begin
  3231.                                 if add=TRUE then response:="OK" else response:="Suchort verlassen";
  3232.                                 VariableString:=Pfad;
  3233.                                 if add=TRUE then Dummy:=long(AddPart(VariableString,FIB^.fib_FileName,364));
  3234.                                 Reset(forIFFIn,VariableString);
  3235.                                 Dummy:=IOResult;
  3236.                                 if Dummy<>0 then begin
  3237.                                         Dummy:=long(Fault(Dummy,NIL,VariableString,364));
  3238.                                         if Switches and (long(1) SHL 5)<>0 then
  3239.                                                 Dummy:=GiveQuestion("XSearch 1.0 ["+ProjektName+"] - IFF control",FIB^.fib_FileName+LF+"couldn't have been read."+LF+"("+VariableString+")",Response,win)
  3240.                                         else
  3241.                                                 Dummy:=GiveQuestion("XSearch 1.0 ["+ProjektName+"] - file-internal search",FIB^.fib_FileName+LF+"couldn't have been read."+LF+"("+VariableString+")",Response,win);
  3242.                                         goto UndTschuess
  3243.                                 end;
  3244.                                 if Switches and (long(1) SHL 5)<>0 then begin
  3245.                                         for i:=1 to 4 do read(forIFFIn,VariableString[i]);
  3246.                                         VariableString[5]:=chr(0);
  3247.                                         if VariableString="FORM" then begin
  3248.                                                 for i:=1 to 4 do read(forIFFIn,VariableString[i]);
  3249.                                                 for i:=1 to 4 do read(forIFFIn,VariableString[i]);
  3250.                                                 Dummy:=IOResult;
  3251.                                                 if Dummy<>0 then begin
  3252.                                                         Dummy:=long(Fault(Dummy,NIL,VariableString,364));
  3253.                                                         Dummy:=GiveQuestion("XSearch 1.0 ["+ProjektName+"] - IFF control",FIB^.fib_FileName+LF+"couldn't have been read."+LF+"("+VariableString+")",Response,win);
  3254.                                                         close(forIFFIn);
  3255.                                                         goto UndTschuess
  3256.                                                 end;
  3257.                                                 for i:=1 to NumIFF do
  3258.                                                         if copy(PreIFF,(i-1)*5+1,4)=VariableString then goto RausAusDerSchleife;
  3259.                                                 close(forIFFIn);
  3260.                                                 goto UndTschuess;
  3261.                                                 RausAusDerSchleife:
  3262.                                         end else begin
  3263.                                                 if UsedXSP.DirOther=TRUE then goto UndTschuess
  3264.                                         end
  3265.                                 end;
  3266.                                 if Switches and (long(1) SHL 6)<>0 then begin
  3267.                                         Buffer(forIFFIn,10000);
  3268.                                         while EOF(forIFFIn)=FALSE do begin
  3269.                                                 readln(forIFFIn,VariableString);
  3270.                                                 if Dummy<>0 then begin
  3271.                                                         Dummy:=long(Fault(Dummy,NIL,VariableString,364));
  3272.                                                         Dummy:=GiveQuestion("XSearch 1.0 ["+ProjektName+"] - file-internal search",FIB^.fib_FileName+LF+"couldn't have been read."+LF+"("+VariableString+")",Response,win);
  3273.                                                         close(forIFFIn);
  3274.                                                         goto UndTschuess
  3275.                                                 end;
  3276.                                                 if CaseFileIn=FALSE then begin
  3277.                                                         if MatchPatternNoCase(PreIn,VariableString)=TRUE then goto RausAusDerWhile
  3278.                                                 end else
  3279.                                                         if MatchPattern(PreIn,VariableString)=TRUE then goto RausAusDerWhile;
  3280.                                         end;
  3281.                                         close(forIFFIn);
  3282.                                         goto UndTschuess;
  3283.                                         RausAusDerWhile:
  3284.                                 end;
  3285.                                 close(forIFFIn)
  3286.                         end
  3287.                 end
  3288.         end;
  3289.         CheckEntry:=TRUE;
  3290.         UndTschuess:
  3291. END;
  3292.  
  3293. PROCEDURE GetRidOfForLookUp(VAR win:p_window);
  3294. BEGIN
  3295.         win^.flags:=win^.flags or WFLG_RMBTRAP;
  3296.         win^.IDCMPFlags:=0;
  3297.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget^.nextgadget:=NIL
  3298. END;
  3299.  
  3300. PROCEDURE GetBackForLookUp(VAR win:p_window,GadgetCycle:p_gadget);
  3301. BEGIN
  3302.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget^.nextgadget:=GadgetCycle;
  3303.         win^.IDCMPFlags:=IDCMP_CLOSEWINDOW or IDCMP_GADGETUP or IDCMP_GADGETDOWN or IDCMP_VANILLAKEY or IDCMP_NEWSIZE or IDCMP_MOUSEMOVE or IDCMP_MOUSEBUTTONS or IDCMP_INTUITICKS or IDCMP_MENUPICK;
  3304.         win^.flags:=win^.flags xor WFLG_RMBTRAP;
  3305.         RefreshGadgets(win^.FirstGadget,win,NIL);
  3306.         GT_RefreshWindow(win,NIL);
  3307.         DrawBevelLine(win,346,121,144,FALSE,FALSE,DI);
  3308. END;
  3309.  
  3310. PROCEDURE LookUp;
  3311. LABEL   BACK,Overjump,Stick,Stick2,FoundAnError,CureAnError,AskWhat,OutOfClipboard,
  3312.         Asking1,Asking2,Asking3,LookWhatExitSearch,BeforeLookWhatExitSearch,CopyJump;
  3313. VAR     LookedList:                             p_List;
  3314.         PathNode,PathNodeBack:                  p_StringNode;
  3315.         PathList:                               p_List;
  3316.         AnchorList:                             p_List;
  3317.         AnchorNodeV:                            p_AnchorNode;
  3318.         Through :                               p_SearchNode;
  3319.         win     :                               p_window;
  3320.         winBit  :                               long;
  3321.         ZOM     :                               array[1..4] of word;
  3322.         TagsCHANGES:                            array[1..13] of TagItem;
  3323.         CG      :                               p_gadget;
  3324.         CurrentGadget:                          p_gadget;
  3325.         NewMenuFields:                          array[1..8] of NewMenu;
  3326.         MenuFields:                             p_Menu;
  3327.         NItem   :                               p_menuitem;
  3328.         NewGadgetFields:                        newgadget;
  3329.         ContentsWhere:                          array[1..3] of str;
  3330.         ContentsDoing:                          array[1..3] of str;
  3331.         GadgetLookedList:                       p_gadget;
  3332.         GadgetPathList:                         p_gadget;
  3333.         GadgetPlus:                             p_gadget;
  3334.         GadgetReverse:                          p_gadget;
  3335.         GadgetWhere:                            p_gadget;
  3336.         GadgetCopy:                             p_gadget;
  3337.         GadgetNew:                              p_gadget;
  3338.         GadgetStop:                             p_gadget;
  3339.         GadgetDoing:                            p_gadget;
  3340.         GadgetBack:                             p_gadget;
  3341.         GadgetEnd:                              p_gadget;
  3342.         BoolWhere:                              long;
  3343.         imsg    :                               p_intuimessage;
  3344.         SIGNAL  :                               long;
  3345.         MyString:                               DirString;
  3346.         CurrentDirectory:                       DirString;
  3347.         i       :                               integer;
  3348.         recursive:                              boolean;
  3349.         layer   :                               integer;
  3350.         MyAnchor:                               p_AnchorPath;
  3351.         CurrentLock:                            BPTR;
  3352.         OldLock:                                BPTR;
  3353.         dummy   :                               long;
  3354.         ExitSearching:                          integer;
  3355.         Pause   :                               boolean;
  3356.         WhereIStopped:                          integer;
  3357.         ChosenMenu:                             long;
  3358.         MenuContinue:                           boolean;
  3359.         IFF     :                               p_IFFHandle;
  3360.         DidIt   :                               long;
  3361.         DejaDemande:                            boolean;
  3362.         ResultFile:                             Text;
  3363.         SearchFileInfo:                         p_FileInfoBlock;
  3364. BEGIN
  3365.         GadgetLookedList:=CreateContext(^CG);
  3366.  
  3367.         New(PathList);
  3368.         InitList(PathList);
  3369.         New(LookedList);
  3370.         InitList(LookedList);
  3371.         new(AnchorList);
  3372.         InitList(AnchorList);
  3373.  
  3374.         TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  3375.         TagsCHANGES[1].ti_Data:=long(LookedList);
  3376.         TagsCHANGES[2]:=TagItem(GTLV_ScrollWidth,16);
  3377.         TagsCHANGES[3].ti_Tag:=TAG_END;
  3378.         NewGadgetFields:=NewGadget(10,5,228,100,NIL,^tattr,1,0,VI,NIL);
  3379.         GadgetLookedList:=CreateGadgetA(LISTVIEW_KIND,CG,^NewGadgetFields,
  3380.                 ^TagsCHANGES);
  3381.  
  3382.         TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  3383.         TagsCHANGES[1].ti_Data:=long(PathList);
  3384.         TagsCHANGES[2]:=TagItem(GTLV_ScrollWidth,16);
  3385.         TagsCHANGES[3]:=TagItem(GTLV_ReadOnly,long(TRUE));
  3386.         TagsCHANGES[4].ti_Tag:=TAG_END;
  3387.         NewGadgetFields:=NewGadget(264,21,228,86,"Path",^tattr,2,
  3388.                 PLACETEXT_ABOVE,VI,NIL);
  3389.         GadgetPathList:=CreateGadgetA(LISTVIEW_KIND,GadgetLookedList,^NewGadgetFields,
  3390.                 ^TagsCHANGES);
  3391.  
  3392.         NewGadgetFields:=NewGadget(238,83,20,11,"·",^tattr,3,PLACETEXT_IN,
  3393.                 VI,NIL);
  3394.         GadgetPlus:=CreateGadgetA(BUTTON_KIND,GadgetPathList,^NewGadgetFields,NIL);
  3395.  
  3396.         NewGadgetFields:=NewGadget(238,94,20,11,Reverse,^tattr,4,PLACETEXT_IN,
  3397.                 VI,NIL);
  3398.         GadgetReverse:=CreateGadgetA(BUTTON_KIND,GadgetPlus,^NewGadgetFields,NIL);
  3399.  
  3400.         ContentsWhere[1]:="Clipboard";
  3401.         ContentsWhere[2]:="File";
  3402.         ContentsWhere[3]:=NIL;
  3403.         TagsCHANGES[1].ti_Tag:=GTCY_Labels;
  3404.         TagsCHANGES[1].ti_Data:=ContentsWhere;
  3405.         TagsCHANGES[2]:=TagItem(GT_Underscore,long("_"));
  3406.         TagsCHANGES[3].ti_Tag:=TAG_END;
  3407.         NewGadgetFields:=NewGadget(118,107,120,12,"_in",^tattr,5,PLACETEXT_LEFT,
  3408.                 VI,NIL);
  3409.         GadgetWhere:=CreateGadgetA(CYCLE_KIND,GadgetReverse,^NewGadgetFields,
  3410.                 ^TagsCHANGES);
  3411.  
  3412.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  3413.         TagsCHANGES[2].ti_Tag:=TAG_END;
  3414.         NewGadgetFields:=NewGadget(118,121,120,12,"_copy",^tattr,6,PLACETEXT_IN,
  3415.                 VI,NIL);
  3416.         GadgetCopy:=CreateGadgetA(BUTTON_KIND,GadgetWhere,^NewGadgetFields,
  3417.                 ^TagsCHANGES);
  3418.  
  3419.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  3420.         TagsCHANGES[2].ti_Tag:=TAG_END;
  3421.         NewGadgetFields:=NewGadget(294,107,50,12,"_New",^tattr,7,PLACETEXT_IN,
  3422.                 VI,NIL);
  3423.         GadgetNew:=CreateGadgetA(BUTTON_KIND,GadgetCopy,^NewGadgetFields,
  3424.                 ^TagsCHANGES);
  3425.  
  3426.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  3427.         TagsCHANGES[2]:=TagItem(GA_Disabled,long(TRUE));
  3428.         TagsCHANGES[3].ti_Tag:=TAG_END;
  3429.         NewGadgetFields:=NewGadget(348,107,60,12,"_Stop",^tattr,8,PLACETEXT_IN,
  3430.                 VI,NIL);
  3431.         GadgetStop:=CreateGadgetA(BUTTON_KIND,GadgetNew,^NewGadgetFields,
  3432.                 ^TagsCHANGES);
  3433.  
  3434.         NewGadgetFields:=NewGadget(466,107,0,0,"Pause",^tattr,9,PLACETEXT_LEFT,
  3435.                 VI,NIL);
  3436.         GadgetDoing:=CreateGadgetA(CHECKBOX_KIND,GadgetStop,^NewGadgetFields,NIL);
  3437.  
  3438.         NewGadgetFields:=NewGadget(366,125,60,12,"Back",^tattr,10,PLACETEXT_IN,
  3439.                 VI,NIL);
  3440.         GadgetBack:=CreateGadgetA(BUTTON_KIND,GadgetDoing,^NewGadgetFields,NIL);
  3441.  
  3442.         NewGadgetFields:=NewGadget(432,125,60,12,"Quit",^tattr,11,PLACETEXT_IN,
  3443.                 VI,NIL);
  3444.         GadgetEnd:=CreateGadgetA(BUTTON_KIND,GadgetBack,^NewGadgetFields,NIL);
  3445.  
  3446.         NewMenuFields[1]:=NewMenu(NM_TITLE,0,"Project",NIL,0,0,NIL);
  3447.         NewMenuFields[2]:=NewMenu(NM_ITEM,0,"Save","S",0,0,NIL);
  3448.         NewMenuFields[3]:=NewMenu(NM_ITEM,0,"Save as...","A",0,0,NIL);
  3449.         NewMenuFields[4]:=NewMenu(NM_ITEM,0,str(NM_BARLABEL),NIL,0,0,NIL);
  3450.         NewMenuFields[5]:=NewMenu(NM_ITEM,0,"Preferences...",NIL,0,0,NIL);
  3451.         NewMenuFields[6]:=NewMenu(NM_ITEM,0,"About...",NIL,0,0,NIL);
  3452.         NewMenuFields[7]:=NewMenu(NM_ITEM,0,"Quit","Q",0,0,NIL);
  3453.         NewMenuFields[8].nm_Type:=NM_END;
  3454.         MenuFields:=CreateMenusA(^NewMenuFields,NIL);
  3455.         TagsCHANGES[1].ti_Tag:=GTMN_TextAttr;
  3456.         TagsCHANGES[1].ti_Data:=^tattr;
  3457.         TagsCHANGES[2].ti_Tag:=TAG_END;
  3458.         dummy:=long(LayoutMenusA(MenuFields,VI,^TagsCHANGES));
  3459.  
  3460.         ZOM[1]:=20;
  3461.         ZOM[2]:=10;
  3462.         ZOM[3]:=350;
  3463.         ZOM[4]:=scr^.font^.ta_Ysize+6;
  3464.         TagsCHANGES[1]:=TagItem(WA_Top,10);
  3465.         TagsCHANGES[2]:=TagItem(WA_Left,20);
  3466.         TagsCHANGES[3]:=TagItem(WA_InnerHeight,143);
  3467.         TagsCHANGES[4]:=TagItem(WA_InnerWidth,504);
  3468.         TagsCHANGES[5].ti_Tag:=WA_Title;
  3469.         TagsCHANGES[5].ti_Data:=ProjektXSearch;
  3470.         TagsCHANGES[6]:=TagItem(WA_Flags,WFLG_CLOSEGADGET or WFLG_GIMMEZEROZERO or
  3471.                 WFLG_ACTIVATE or WFLG_DRAGBAR or WFLG_SMART_REFRESH or
  3472.                 WFLG_DEPTHGADGET);
  3473.         TagsCHANGES[7]:=TagItem(WA_IDCMP,IDCMP_CLOSEWINDOW or IDCMP_GADGETUP or
  3474.                 IDCMP_GADGETDOWN or IDCMP_VANILLAKEY or IDCMP_NEWSIZE or
  3475.                 IDCMP_MOUSEMOVE or IDCMP_MOUSEBUTTONS or IDCMP_INTUITICKS or
  3476.                 IDCMP_MENUPICK);
  3477.         TagsCHANGES[8]:=TagItem(WA_CustomScreen,long(scr));
  3478.         TagsCHANGES[9].ti_Tag:=WA_Gadgets;
  3479.         TagsCHANGES[9].ti_Data:=CG^;
  3480.         TagsCHANGES[10]:=TagItem(WA_MouseQueue,0);
  3481.         TagsCHANGES[11]:=TagItem(WA_RptQueue,0);
  3482.         TagsCHANGES[12].ti_Tag:=WA_Zoom;
  3483.         TagsCHANGES[12].ti_Data:=ZOM;
  3484.         TagsCHANGES[13].ti_Tag:=TAG_END;
  3485.         win:=OpenWindowTagList(NIL,^TagsCHANGES);
  3486.         winBit:=long(1) shl win^.userport^.mp_sigbit;
  3487.         SIGNAL:=SetFont(win^.RPort,tfont);
  3488.  
  3489.         dummy:=long(SetMenuStrip(win,MenuFields));
  3490.         DrawBevelLine(win,346,121,144,FALSE,FALSE,DI);
  3491.         GT_RefreshWindow(win,NIL);
  3492.         RefreshGadgets(win^.firstgadget,win,NIL);
  3493.  
  3494.         DejaDemande:=FALSE;
  3495.         MenuContinue:=FALSE;
  3496.         Pause:=FALSE;
  3497.         BoolWhere:=0;
  3498.         WhereIStopped:=0;
  3499.         EndExit:=35;
  3500.         goto Overjump;
  3501.  
  3502.         BACK:
  3503.         EndExit:=-1;
  3504.  
  3505.         while (EndExit=-1) or ((EndExit=35) and (WhereIStopped<>0)) do begin
  3506.                 if (MenuContinue=FALSE) and (WhereIStopped<>0) then begin
  3507.                         EndExit:=35;
  3508.                         case WhereIStopped of
  3509.                                 1:      begin WhereIStopped:=0; goto Asking1 end
  3510.                                 2:      begin WhereIStopped:=0; goto Asking2 end
  3511.                                 3:      begin WhereIStopped:=0; goto Asking3 end
  3512.                                 else
  3513.                         end
  3514.                 end;
  3515.                 if (MenuContinue=FALSE) and (WhereIStopped=0) then begin
  3516.                         imsg:=Wait_Port(win^.userport);
  3517.                         imsg:=GT_GetIMsg(win^.userport);
  3518.                         GT_ReplyIMsg(imsg);
  3519.                         AskWhat:
  3520.                         case imsg^.class of
  3521.                                 IDCMP_CLOSEWINDOW:
  3522.                                         if WhereIStopped<>0 then begin if saved=FALSE then EndExit:=0 else ExitSearching:=4 end else EndExit:=0
  3523.                                 IDCMP_NEWSIZE: begin
  3524.                                         DrawBevelLine(win,346,121,144,FALSE,FALSE,DI);
  3525.                                         GT_RefreshWindow(win,NIL);
  3526.                                 end
  3527.                                 IDCMP_VANILLAKEY: begin
  3528.                                         if imsg^.code>96 then imsg^.code:=imsg^.code-32;
  3529.                                         case imsg^.code of
  3530.                                                 78:     if WhereIStopped<>0 then ExitSearching:=3 else EndExit:=35
  3531.                                                 83:     if WhereIStopped<>0 then ExitSearching:=2
  3532.                                                 73:     begin
  3533.                                                         if BoolWhere=0 then BoolWhere:=1 else BoolWhere:=0;
  3534.                                                         TagsCHANGES[1]:=TagItem(GTCY_Active,BoolWhere);
  3535.                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  3536.                                                         GT_SetGadgetAttrsA(GadgetWhere,win,NIL,^TagsCHANGES)
  3537.                                                 end
  3538.                                                 32:     begin
  3539.                                                         TagsCHANGES[1].ti_Tag:=GTCB_Checked; TagsCHANGES[1].ti_Data:=long((GadgetDoing^.flags and GFLG_Selected)=0);
  3540.                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  3541.                                                         GT_SetGadgetAttrsA(GadgetDoing,win,NIL,^TagsCHANGES);
  3542.                                                         Pause:=boolean(TagsCHANGES[1].ti_Data)
  3543.                                                 end;
  3544.                                                 67:     goto CopyJump
  3545.                                                 13:     if WhereIStopped<>0 then ExitSearching:=5 else EndExit:=1
  3546.                                                 27:     if WhereIStopped<>0 then begin if saved=FALSE then EndExit:=0 else ExitSearching:=4 end else EndExit:=0
  3547.                                                 else
  3548.                                         end
  3549.                                 end
  3550.                                 IDCMP_GADGETUP: begin
  3551.                                         CurrentGadget:=imsg^.iaddress;
  3552.                                         case CurrentGadget^.gadgetid of
  3553.                                                 1:      begin
  3554.                                                         SearchNodeV:=p_SearchNode(LookedList^.lh_Head);
  3555.                                                         FOR i:=1 to imsg^.code do
  3556.                                                                 SearchNodeV:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  3557.                                                         if SearchNodeV^.sen_String[1]=" " then SearchNodeV^.sen_String[1]:="·" else SearchNodeV^.sen_String[1]:=" ";
  3558.                                                         GT_SetGadgetAttrsA(GadgetLookedList,win,NIL,NIL);
  3559.                                                         if WhereIStopped=0 then begin
  3560.                                                                 PathNode:=p_StringNode(PathList^.lh_Head);
  3561.                                                                 WHILE p_StringNode(PathNode^.stn_Node.ln_Succ)<>NIL DO BEGIN
  3562.                                                                         PathNodeBack:=p_StringNode(PathNode^.stn_Node.ln_Succ);
  3563.                                                                         Remove(p_Node(^PathNode^.stn_Node));
  3564.                                                                         dispose(PathNode);
  3565.                                                                         PathNode:=PathNodeBack;
  3566.                                                                 END;
  3567.                                                                 VariableString:=SearchNodeV^.sen_Path;
  3568.                                                                 while VariableString[length(VariableString)]<>":" do begin
  3569.                                                                         New(PathNode);
  3570.                                                                         MyString:=FilePart(VariableString);
  3571.                                                                         PathNode^.stn_Node.ln_pri:=0;
  3572.                                                                         PrepareNode(PathNode,MyString);
  3573.                                                                         AddHead(PathList,p_Node(PathNode));
  3574.                                                                         VariableString:=copy(VariableString,1,length(VariableString)-length(PathPart(VariableString)));
  3575.                                                                 end;
  3576.                                                                 New(PathNode);
  3577.                                                                 MyString:=VariableString;
  3578.                                                                 PathNode^.stn_Node.ln_pri:=0;
  3579.                                                                 PrepareNode(PathNode,MyString);
  3580.                                                                 AddHead(PathList,p_Node(PathNode));
  3581.                                                                 TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  3582.                                                                 TagsCHANGES[1].ti_Data:=long(PathList);
  3583.                                                                 GT_SetGadgetAttrsA(GadgetPathList,win,NIL,^TagsCHANGES)
  3584.                                                         end
  3585.                                                 end
  3586.                                                 3:      begin
  3587.                                                         SearchNodeV:=p_SearchNode(LookedList^.lh_Head);
  3588.                                                         WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  3589.                                                                 SearchNodeV^.sen_String[1]:="·";
  3590.                                                                 SearchNodeV:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  3591.                                                         END;
  3592.                                                         GT_SetGadgetAttrsA(GadgetLookedList,win,NIL,NIL)
  3593.                                                 end
  3594.                                                 4:      begin
  3595.                                                         SearchNodeV:=p_SearchNode(LookedList^.lh_Head);
  3596.                                                         WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  3597.                                                                 if SearchNodeV^.sen_String[1]="·" then SearchNodeV^.sen_String[1]:=" " else SearchNodeV^.sen_String[1]:="·";
  3598.                                                                 SearchNodeV:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  3599.                                                         END;
  3600.                                                         GT_SetGadgetAttrsA(GadgetLookedList,win,NIL,NIL)
  3601.                                                 end
  3602.                                                 5:      BoolWhere:=imsg^.code
  3603.                                                 6:      begin
  3604.                                                         CopyJump:
  3605.                                                         if BoolWhere=0 then begin
  3606.                                                                 IFF:=AllocIFF;
  3607.                                                                 IFF^.iff_Stream:=long(OpenClipboard(PRIMARY_CLIP));
  3608.                                                                 if IFF^.IFF_Stream<>long(NIL) then begin
  3609.                                                                         InitIFFasClip(IFF);
  3610.                                                                         if OpenIFF(IFF,IFFF_WRITE)=0 then begin
  3611.                                                                                 DidIt:=PushChunk(IFF,ID_FTXT,ID_FORM,IFFSIZE_UNKNOWN);
  3612.                                                                                 DidIt:=PushChunk(IFF,0,ID_CHRS,IFFSIZE_UNKNOWN);
  3613.                                                                                 SearchNodeV:=p_SearchNode(LookedList^.lh_Head);
  3614.                                                                                 while p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL do begin
  3615.                                                                                         if SearchNodeV^.sen_String[1]="·" then begin
  3616.                                                                                                 VariableString:=SearchNodeV^.sen_Path+LF;
  3617.                                                                                                 VariableStr:=VariableString;
  3618.                                                                                                 if (WriteChunkBytes(IFF,ptr(VariableStr),length(VariableStr)))<>length(VariableStr) then begin
  3619.                                                                                                         GiveError("XSearch 1.0 - Clipboard","Error while copying.",win);
  3620.                                                                                                         goto OutOfClipboard
  3621.                                                                                                 end
  3622.                                                                                         end;
  3623.                                                                                         SearchNodeV:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  3624.                                                                                 end;
  3625.                                                                                 OutOfClipboard:
  3626.                                                                                 DidIt:=PopChunk(IFF);
  3627.                                                                                 DidIt:=PopChunk(IFF);
  3628.                                                                                 CloseIFF(IFF)
  3629.                                                                         end else
  3630.                                                                                 GiveError("XSearch 1.0 - Clipboard","Data exchange with Clipboard not possible.",win);
  3631.                                                                         CloseClipboard(p_ClipboardHandle(IFF^.iff_Stream))
  3632.                                                                 end else
  3633.                                                                         GiveError("XSearch 1.0 - Clipboard","I'm not able to open the Clipboard.",win);
  3634.                                                                 FreeIFF(IFF)
  3635.                                                         end else begin
  3636.                                                                 if FileProjekt(4,win)=FALSE then goto BACK;
  3637.                                                                 if ProjektDir[length(ProjektDir)]=":" then VariableString:=ProjektDir+ProjektName else VariableString:=ProjektDir+"/"+ProjektName;
  3638.                                                                 VariableStr:=VariableString;
  3639.                                                                 ReWrite(ResultFile,VariableStr);
  3640.                                                                 Dummy:=IOResult;
  3641.                                                                 if Dummy<>0 then begin
  3642.                                                                         Dummy:=long(Fault(Dummy,NIL,VariableString,364));
  3643.                                                                         GiveError("XSearch 1.0 ["+ProjektName+"] - Save results","Error while saving."+LF+"("+VariableString+")",win);
  3644.                                                                         goto BACK
  3645.                                                                 end;
  3646.                                                                 Buffer(ResultFile,10000);
  3647.                                                                 WaitPointer(win);
  3648.                                                                 GetRidOfForLookUp(win);
  3649.                                                                 SearchNodeV:=p_SearchNode(LookedList^.lh_Head);
  3650.                                                                 while p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL do begin
  3651.                                                                         if SearchNodeV^.sen_String[1]="·" then begin
  3652.                                                                                 writeln (ResultFile,SearchNodeV^.sen_Path);
  3653.                                                                                 Dummy:=IOResult;
  3654.                                                                                 if Dummy<>0 then begin
  3655.                                                                                         Dummy:=long(Fault(Dummy,NIL,VariableString,364));
  3656.                                                                                         GiveError("XSearch 1.0 ["+ProjektName+"] - Save results","Error while saving."+LF+"("+VariableString+")",win);
  3657.                                                                                         close(ResultFile);
  3658.                                                                                         GetBackForLookUp(win,CG);
  3659.                                                                                         NormalPointer(win);
  3660.                                                                                         RestoreProjektNameDir;
  3661.                                                                                         goto BACK
  3662.                                                                                 end;
  3663.                                                                         end;
  3664.                                                                         SearchNodeV:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  3665.                                                                 end;
  3666.                                                                 GetBackForLookUp(win,CG);
  3667.                                                                 NormalPointer(win);
  3668.                                                                 RestoreProjektNameDir;
  3669.                                                                 close(ResultFile)
  3670.                                                         end
  3671.                                                 end
  3672.                                                 7:      if WhereIStopped<>0 then ExitSearching:=3 else EndExit:=35
  3673.                                                 8:      ExitSearching:=2
  3674.                                                 9:      Pause:=(GadgetDoing^.flags and GFLG_Selected)<>0
  3675.                                                 10:     if WhereIStopped<>0 then ExitSearching:=5 else EndExit:=1
  3676.                                                 11:     if WhereIStopped<>0 then begin if saved=FALSE then EndExit:=0 else ExitSearching:=4 end else EndExit:=0
  3677.                                                 else
  3678.                                         end
  3679.                                 end
  3680.                                 IDCMP_MENUPICK: begin
  3681.                                         ChosenMenu:=imsg^.code;
  3682.                                         MenuContinue:=TRUE
  3683.                                 end
  3684.                                 else
  3685.                         end;
  3686.                 end else begin
  3687.                         case ChosenMenu and $1f of
  3688.                                 0:      case (ChosenMenu and $7e0) div 32 of
  3689.                                                 0:      EndExit:=52
  3690.                                                 1:      EndExit:=53
  3691.                                                 3:      begin
  3692.                                                         WaitPointer(win);
  3693.                                                         GetRidOfForLookUp(win);
  3694.                                                         PreferencesXSearch;
  3695.                                                         GetBackForLookUp(win,CG);
  3696.                                                         NormalPointer(win);
  3697.                                                 end
  3698.                                                 4:      begin
  3699.                                                         WaitPointer(win);
  3700.                                                         GetRidOfForLookUp(win);
  3701.                                                         AboutXSearch;
  3702.                                                         GetBackForLookUp(win,CG);
  3703.                                                         NormalPointer(win);
  3704.                                                 end
  3705.                                                 5:      if WhereIStopped<>0 then begin if saved=FALSE then EndExit:=0 else ExitSearching:=4 end else EndExit:=0
  3706.                                                 else
  3707.                                         end
  3708.                                 else
  3709.                         end;
  3710.                         NItem:=ItemAddress(MenuFields,ChosenMenu);
  3711.                         ChosenMenu:=NItem^.nextselect;
  3712.                         if (ChosenMenu=MENUNULL) or (ChosenMenu=$F8) then MenuContinue:=FALSE
  3713.                 end;
  3714.         end;
  3715.  
  3716.         OverJump:
  3717.  
  3718.         if EndExit=35 then begin
  3719.                 SearchNodeV:=p_SearchNode(LookedList^.lh_Head);
  3720.                 WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  3721.                         SearchNodeBack:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  3722.                         Remove(p_Node(^SearchNodeV^.sen_Node));
  3723.                         dispose(SearchNodeV);
  3724.                         SearchNodeV:=SearchNodeBack;
  3725.                 END;
  3726.                 TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  3727.                 TagsCHANGES[1].ti_Data:=long(LookedList);
  3728.                 TagsCHANGES[2].ti_Tag:=TAG_END;
  3729.                 GT_SetGadgetAttrsA(GadgetLookedList,win,NIL,^TagsCHANGES);
  3730.                 TagsCHANGES[1]:=TagItem(GA_Disabled,long(FALSE));
  3731.                 TagsCHANGES[2].ti_Tag:=TAG_END;
  3732.                 GT_SetGadgetAttrsA(GadgetStop,win,NIL,^TagsCHANGES);
  3733.                 Through:=p_SearchNode(SearchList^.lh_Head);
  3734.                 while p_SearchNode(Through^.sen_Node.ln_Succ)<>NIL do BEGIN
  3735.                         ExitSearching:=0;
  3736.                         Asking1:
  3737.                         imsg:=GT_GetIMsg(win^.userport);
  3738.                         GT_ReplyIMsg(imsg);
  3739.                         if (imsg<>NIL) and (imsg^.class<>IDCMP_INTUITICKS) then begin WhereIStopped:=1; goto AskWhat end;
  3740.                         if ExitSearching>0 then goto LookWhatExitSearch;
  3741.                         if Pause=TRUE then begin imsg:=Wait_Port(win^.UserPort); goto Asking1 end;
  3742.                         New(PathNode);
  3743.                         if Through^.sen_Path[length(Through^.sen_Path)]=":" then MyString:=Through^.sen_Path else MyString:=FilePart(Through^.sen_Path);
  3744.                         PathNode^.stn_Node.ln_pri:=0;
  3745.                         PrepareNode(PathNode,MyString);
  3746.                         AddHead(PathList,p_Node(PathNode));
  3747.                         TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  3748.                         TagsCHANGES[1].ti_Data:=long(PathList);
  3749.                         TagsCHANGES[2].ti_Tag:=TAG_END;
  3750.                         GT_SetGadgetAttrsA(GadgetPathList,win,NIL,^TagsCHANGES);
  3751.                         if Through^.sen_Node.ln_pri=0 then begin
  3752.                                 ExitSearching:=0;
  3753.                                 CurrentLock:=Lock(Through^.sen_Path,SHARED_LOCK);
  3754.                                 dummy:=IOErr;
  3755.                                 if dummy<>0 then begin
  3756.                                         if Through^.sen_Path[length(Through^.sen_Path)]=":" then MyString:=Through^.sen_Path else MyString:=FilePart(Through^.sen_Path);
  3757.                                         Dummy:=long(Fault(Dummy,NIL,VariableString,364));
  3758.                                         dummy:=GiveQuestion("XSearch 1.0 - Searching process","Error while reading "+MyString+" -"+LF+VariableString,"Leave searching place",win);
  3759.                                         ExitSearching:=1;
  3760.                                         goto BeforeLookWhatExitSearch
  3761.                                 end;
  3762.                                 new(SearchFileInfo);
  3763.                                 Dummy:=Examine(CurrentLock,SearchFileInfo);
  3764.                                 if dummy=0 then begin
  3765.                                         if Through^.sen_Path[length(Through^.sen_Path)]=":" then MyString:=Through^.sen_Path else MyString:=FilePart(Through^.sen_Path);
  3766.                                         dummy:=GiveQuestion("XSearch 1.0 - Searching process","Error while reading "+LF+MyString+".","Leave searching place",win);
  3767.                                         dispose(SearchFileInfo);
  3768.                                         Unlock(CurrentLock);
  3769.                                         ExitSearching:=1;
  3770.                                         goto BeforeLookWhatExitSearch
  3771.                                 end;
  3772.                                 if (CheckEntry(SearchFileInfo,Through^.sen_Path,win,FALSE)=TRUE) and (ExitSearching=0) then begin
  3773.                                         New(SearchNodeBack);
  3774.                                         SearchNodeBack^.sen_Path:=Through^.sen_Path;
  3775.                                         SearchNodeBack^.sen_Node.ln_Pri:=0;
  3776.                                         MyString:=Through^.sen_String;
  3777.                                         PrepareNode(SearchNodeBack,MyString);
  3778.                                         SortInDirList(LookedList,^SearchNodeBack^.sen_Node,3);
  3779.                                         TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  3780.                                         TagsCHANGES[1].ti_Data:=long(LookedList);
  3781.                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  3782.                                         GT_SetGadgetAttrsA(GadgetLookedList,win,NIL,^TagsCHANGES);
  3783.                                 end;
  3784.                                 dispose(SearchFileInfo);
  3785.                                 UnLock(CurrentLock)
  3786.                         end else begin
  3787.                                 recursive:=Through^.sen_String[3]="D";
  3788.                                 layer:=0;
  3789.                                 Stick:
  3790.                                 layer:=layer+1;
  3791.                                 CurrentLock:=Lock(Through^.sen_Path,SHARED_LOCK);
  3792.                                 dummy:=IOErr;
  3793.                                 if dummy=0 then begin
  3794.                                         new(MyAnchor);
  3795.                                         OldLock:=CurrentDir(CurrentLock);
  3796.                                         dummy:=MatchFirst("#?",MyAnchor);
  3797.                                         if dummy<>0 then goto FoundAnError;
  3798.                                         repeat
  3799.                                                 Asking2:
  3800.                                                 imsg:=GT_GetIMsg(win^.userport);
  3801.                                                 GT_ReplyIMsg(imsg);
  3802.                                                 if (imsg<>NIL) and (imsg^.class<>IDCMP_INTUITICKS) then begin WhereIStopped:=2; goto AskWhat end;
  3803.                                                 if ExitSearching>0 then goto CureAnError;
  3804.                                                 if Pause=TRUE then begin imsg:=Wait_Port(win^.UserPort); goto Asking2 end;
  3805.                                                 if CheckEntry(^MyAnchor^.ap_Info,Through^.sen_Path,win,TRUE)=TRUE then begin
  3806.                                                         New(SearchNodeBack);
  3807.                                                         SearchNodeBack^.sen_Path:=Through^.sen_Path;
  3808.                                                         dummy:=long(AddPart(SearchNodeBack^.sen_Path,MyAnchor^.ap_Info.fib_FileName,256));
  3809.                                                         if Dummy=0 then begin
  3810.                                                                 dispose (SearchNodeBack);
  3811.                                                                 dummy:=GiveQuestion("XSearch 1.0 - Searching process","Path of"+LF+MyAnchor^.ap_Info.fib_FileName+LF+"is too long.","Continue|Leave dir|Leave searching place",win);
  3812.                                                                 if dummy=0 then begin ExitSearching:=1; goto CureAnError end;
  3813.                                                                 if dummy=1 then goto Stick2;
  3814.                                                                 if dummy=2 then goto CureAnError
  3815.                                                         end;
  3816.                                                         if MyAnchor^.ap_Info.fib_DirEntryType>0 then begin
  3817.                                                                 SearchNodeBack^.sen_Node.ln_Pri:=1;
  3818.                                                                 MyString:="  D "+MyAnchor^.ap_Info.fib_FileName
  3819.                                                         end else begin
  3820.                                                                 SearchNodeBack^.sen_Node.ln_Pri:=0;
  3821.                                                                 MyString:="  "+MyAnchor^.ap_Info.fib_FileName
  3822.                                                         end;
  3823.                                                         PrepareNode(SearchNodeBack,MyString);
  3824.                                                         SortInDirList(LookedList,^SearchNodeBack^.sen_Node,3);
  3825.                                                         TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  3826.                                                         TagsCHANGES[1].ti_Data:=long(LookedList);
  3827.                                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  3828.                                                         GT_SetGadgetAttrsA(GadgetLookedList,win,NIL,^TagsCHANGES);
  3829.                                                 end;
  3830.                                                 if (MyAnchor^.ap_Info.fib_DirEntryType>0) and (recursive=TRUE) then begin
  3831.                                                         dummy:=long(AddPart(Through^.sen_Path,MyAnchor^.ap_Info.fib_FileName,256));
  3832.                                                         if Dummy=0 then begin
  3833.                                                                 dummy:=GiveQuestion("XSearch 1.0 - Searching process","Path of"+LF+MyAnchor^.ap_Info.fib_FileName+LF+"is too long.","Continue|Leave dir|Leave searching place",win);
  3834.                                                                 if dummy=0 then begin ExitSearching:=1; goto CureAnError end;
  3835.                                                                 if dummy=1 then goto Stick2;
  3836.                                                                 if dummy=2 then goto CureAnError
  3837.                                                         end;
  3838.                                                         New(AnchorNodeV);
  3839.                                                         AnchorNodeV^.ano_Node.ln_Type:=NT_UNKNOWN;
  3840.                                                         AnchorNodeV^.ano_Node.ln_Pri:=0;
  3841.                                                         AnchorNodeV^.ano_Node.ln_Name:=NIL;
  3842.                                                         AnchorNodeV^.ano_Anchor:=MyAnchor;
  3843.                                                         AnchorNodeV^.ano_Lock:=CurrentLock;
  3844.                                                         AddTail(AnchorList,p_Node(AnchorNodeV));
  3845.                                                         New(PathNode);
  3846.                                                         if Through^.sen_Path[length(Through^.sen_Path)]=":" then MyString:=Through^.sen_Path else MyString:=FilePart(Through^.sen_Path);
  3847.                                                         PathNode^.stn_Node.ln_pri:=0;
  3848.                                                         PrepareNode(PathNode,MyString);
  3849.                                                         AddTail(PathList,p_Node(PathNode));
  3850.                                                         TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  3851.                                                         TagsCHANGES[1].ti_Data:=long(PathList);
  3852.                                                         if layer<10 then
  3853.                                                                 TagsCHANGES[2].ti_Tag:=TAG_END
  3854.                                                         else begin
  3855.                                                                 TagsCHANGES[2].ti_Tag:=GTLV_Top;
  3856.                                                                 TagsCHANGES[2].ti_Data:=layer-8;
  3857.                                                                 TagsCHANGES[3].ti_Tag:=TAG_END
  3858.                                                         end;
  3859.                                                         GT_SetGadgetAttrsA(GadgetPathList,win,NIL,^TagsCHANGES);
  3860.                                                         goto Stick
  3861.                                                 end;
  3862.                                                 Stick2:
  3863.                                                 dummy:=MatchNext(MyAnchor);
  3864.                                                 if dummy<>0 then begin
  3865.                                                         if dummy=ERROR_NO_MORE_ENTRIES then goto CureAnError else ExitSearching:=999;
  3866.                                                         FoundAnError:
  3867.                                                         if ExitSearching<>999 then begin MyAnchor:=NIL; ExitSearching:=0 end;
  3868.                                                         if dummy<>ERROR_NO_MORE_ENTRIES then begin
  3869.                                                                 if Through^.sen_Path[length(Through^.sen_Path)]=":" then MyString:=Through^.sen_Path else MyString:=FilePart(Through^.sen_Path);
  3870.                                                                 Dummy:=long(Fault(Dummy,NIL,VariableString,364));
  3871.                                                                 if layer<>1 then
  3872.                                                                         dummy:=GiveQuestion("XSearch 1.0 - Searching process","Error while reading "+MyString+" -"+LF+VariableString,"Continue|Leave searching place",win)
  3873.                                                                 else begin
  3874.                                                                         dummy:=NOT(GiveQuestion("XSearch 1.0 - Searching process","Error while reading "+MyString+" -"+LF+VariableString,"Leave searching place",win));
  3875.                                                                 end;
  3876.                                                                 if dummy=0 then ExitSearching:=1
  3877.                                                         end;
  3878.                                                         CureAnError:
  3879.                                                         layer:=layer-1;
  3880.                                                         if MyAnchor<>NIL then begin
  3881.                                                                 MatchEnd(MyAnchor);
  3882.                                                                 dispose(MyAnchor);
  3883.                                                         end;
  3884.                                                         UnLock(CurrentLock);
  3885.                                                         if layer<>0 then begin
  3886.                                                                 AnchorNodeV:=p_AnchorNode(AnchorList^.lh_TailPred);
  3887.                                                                 MyAnchor:=AnchorNodeV^.ano_Anchor;
  3888.                                                                 CurrentLock:=AnchorNodeV^.ano_Lock;
  3889.                                                                 RemTail(AnchorList);
  3890.                                                                 dispose(AnchorNodeV);
  3891.                                                                 Through^.sen_Path:=copy(Through^.sen_Path,1,length(Through^.sen_Path)-length(PathPart(Through^.sen_Path)));
  3892.                                                                 PathNode:=p_StringNode(PathList^.lh_TailPred);
  3893.                                                                 dispose(PathNode);
  3894.                                                                 RemTail(PathList);
  3895.                                                                 TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  3896.                                                                 TagsCHANGES[1].ti_Data:=long(PathList);
  3897.                                                                 if layer<10 then
  3898.                                                                         TagsCHANGES[2].ti_Tag:=TAG_END
  3899.                                                                 else begin
  3900.                                                                         TagsCHANGES[2].ti_Tag:=GTLV_Top;
  3901.                                                                         TagsCHANGES[2].ti_Data:=layer-9;
  3902.                                                                         TagsCHANGES[3].ti_Tag:=TAG_END
  3903.                                                                 end;
  3904.                                                                 GT_SetGadgetAttrsA(GadgetPathList,win,NIL,^TagsCHANGES);
  3905.                                                         end;
  3906.                                                         if (ExitSearching>0) and (layer<>0) then goto CureAnError;
  3907.                                                         if layer<>0 then goto Stick2
  3908.                                                 end;
  3909.                                         until layer=0
  3910.                                 end else begin
  3911.                                         Asking3:
  3912.                                         imsg:=GT_GetIMsg(win^.userport);
  3913.                                         GT_ReplyIMsg(imsg);
  3914.                                         if (imsg<>NIL) and (imsg^.class<>IDCMP_INTUITICKS) then begin WhereIStopped:=3; goto AskWhat end;
  3915.                                         if ExitSearching>0 then goto CureAnError;
  3916.                                         if Pause=TRUE then begin imsg:=Wait_Port(win^.UserPort); goto Asking3 end;
  3917.                                         goto FoundAnError
  3918.                                 end
  3919.                         end;
  3920.                         BeforeLookWhatExitSearch:
  3921.                         PathNode:=p_StringNode(PathList^.lh_Head);
  3922.                         dispose(PathNode);
  3923.                         RemHead(PathList);
  3924.                         TagsCHANGES[1].ti_Tag:=GTLV_Labels;
  3925.                         TagsCHANGES[1].ti_Data:=long(PathList);
  3926.                         TagsCHANGES[2].ti_Tag:=TAG_END;
  3927.                         GT_SetGadgetAttrsA(GadgetPathList,win,NIL,^TagsCHANGES);
  3928.                         LookWhatExitSearch:
  3929.                         case ExitSearching of
  3930.                                 2:      begin end
  3931.                                 3:      begin
  3932.                                         ExitSearching:=0;
  3933.                                         goto Overjump
  3934.                                 end
  3935.                                 4:      EndExit:=0
  3936.                                 5:      EndExit:=1
  3937.                                 else    Through:=p_SearchNode(Through^.sen_Node.ln_Succ)
  3938.                         end;
  3939.                         if ExitSearching>1 then Through:=p_SearchNode(SearchList^.lh_Tail)
  3940.                 END;
  3941.                 TagsCHANGES[1]:=TagItem(GA_Disabled,long(TRUE));
  3942.                 TagsCHANGES[2].ti_Tag:=TAG_END;
  3943.                 GT_SetGadgetAttrsA(GadgetStop,win,NIL,^TagsCHANGES);
  3944.                 ExitSearching:=0
  3945.         end;
  3946.  
  3947.         if (EndExit>2) and (EndExit<50) then goto BACK;
  3948.  
  3949.         WaitPointer(win);
  3950.  
  3951.         if EndExit=52 then
  3952.                 saved:=WritePrefs(Projekt,PCA,win,SearchList);
  3953.  
  3954.         if EndExit=53 then begin
  3955.                 GetRidOfForLookUp(win);
  3956.                 Dummy:=long(FileProjekt(1,win));
  3957.                 GetBackForLookUp(win,CG);
  3958.                 if Dummy=long(TRUE) then begin
  3959.                         if ProjektDir[length(ProjektDir)]=":" then
  3960.                                 Dummy:=long(WritePrefs(ProjektDir+ProjektName,PCA,win,SearchList))
  3961.                         else
  3962.                                 Dummy:=long(WritePrefs(ProjektDir+"/"+ProjektName,PCA,win,SearchList));
  3963.                         if Dummy=long(TRUE) then begin Dummy:=long(NameProjekt(FALSE)); SetWindowTitles(win,ProjektXSearch,str(-1)); saved:=TRUE end
  3964.                 end else RestoreProjektNameDir
  3965.         end;
  3966.  
  3967.         if (EndExit>2) or (EndExit<0) then begin NormalPointer(win); goto BACK end;
  3968.  
  3969.         if saved=FALSE then begin
  3970.                 if (EndExit=0) and (dejaDemande=FALSE) then begin
  3971.                         dejaDemande:=TRUE;
  3972.                         SIGNAL:=GiveQuestion(ProjektXSearch+" - Quit","The old project has been changed."+LF+"Do you really want to quit?",
  3973.                                 "Quit|Save, then quit|Cancel",win);
  3974.                         if SIGNAL=2 then begin
  3975.                                 if WritePrefs(Projekt,PCA,win,SearchList)=FALSE then begin NormalPointer(win); goto BACK end else saved:=TRUE;
  3976.                         end;
  3977.                         if SIGNAL=0 then begin DejaDemande:=FALSE; NormalPointer(win); goto BACK end;
  3978.                         if WhereIStopped<>0 then begin ExitSearching:=4; goto BACK end
  3979.                 end
  3980.         end;
  3981.  
  3982.         CloseWindow(win);
  3983.         FreeMenus(MenuFields);
  3984.         FreeGadgets(CG);
  3985.         SearchNodeV:=p_SearchNode(LookedList^.lh_Head);
  3986.         WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  3987.                 SearchNodeBack:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  3988.                 Remove(p_Node(^SearchNodeV^.sen_Node));
  3989.                 dispose(SearchNodeV);
  3990.                 SearchNodeV:=SearchNodeBack;
  3991.         END;
  3992.         dispose(LookedList);
  3993.         PathNode:=p_StringNode(PathList^.lh_Head);
  3994.         WHILE p_StringNode(PathNode^.stn_Node.ln_Succ)<>NIL DO BEGIN
  3995.                 PathNodeBack:=p_StringNode(PathNode^.stn_Node.ln_Succ);
  3996.                 Remove(p_Node(^PathNode^.stn_Node));
  3997.                 dispose(PathNode);
  3998.                 PathNode:=PathNodeBack;
  3999.         END;
  4000.         dispose(PathList);
  4001.         dispose(AnchorList);
  4002. END;
  4003.  
  4004.  
  4005. FUNCTION ReadXSearchPrefs(FileName:DirNameString,VAR RealPrefs:XSearchPrefs):boolean;
  4006. VAR     ReadFile:                               Text;
  4007.         Dummy   :                               long;
  4008.         Identifier:                             string[14];
  4009. LABEL   ExitOut;
  4010. BEGIN
  4011.         ReSet(ReadFile,FileName);
  4012.         Dummy:=IOResult;
  4013.         if Dummy<>0 then begin
  4014.                 ReadXSearchPrefs:=FALSE;
  4015.                 goto ExitOut
  4016.         end;
  4017.         readln (ReadFile,Identifier);
  4018.         if Identifier<>"XSEARCH PREFS" then begin ReadXSearchPrefs:=FALSE; goto ExitOut end;
  4019.         with RealPrefs do begin
  4020.                 readln(ReadFile,Dummy);
  4021.                 FilerStart:=boolean(Dummy);
  4022.                 readln(ReadFile,StartDir);
  4023.                 readln(ReadFile,ProjektDir);
  4024.                 readln(ReadFile,Dummy);
  4025.                 Recursion:=boolean(Dummy);
  4026.                 readln(ReadFile,Dummy);
  4027.                 Sensitivity:=boolean(Dummy);
  4028.                 readln(ReadFile,Dummy);
  4029.                 Coloured:=boolean(Dummy);
  4030.                 readln(ReadFile,DateFormat);
  4031.                 readln(ReadFile,Dummy);
  4032.                 Currency:=boolean(Dummy);
  4033.                 readln(ReadFile,Dummy);
  4034.                 DirLength:=boolean(Dummy);
  4035.                 readln(ReadFile,Dummy);
  4036.                 DirIFF:=boolean(Dummy);
  4037.                 readln(ReadFile,Dummy);
  4038.                 DirFile:=boolean(Dummy);
  4039.                 readln(ReadFile,Dummy);
  4040.                 DirOther:=boolean(Dummy)
  4041.         end;
  4042.         Dummy:=IOResult;
  4043.         Close(ReadFile);
  4044.         if Dummy<>0 then begin
  4045.                 ReadXSearchPrefs:=FALSE;
  4046.                 goto ExitOut
  4047.         end;
  4048.         ReadXSearchPrefs:=TRUE;
  4049.         ExitOut:
  4050. END;
  4051.  
  4052. FUNCTION WriteXSearchPrefs(FileName:DirNameString,RealPrefs:XSearchPrefs,win:p_window):boolean;
  4053. VAR     WriteFile:                              Text;
  4054.         Dummy   :                               integer;
  4055. LABEL   ExitOut;
  4056. BEGIN
  4057.         ReWrite(WriteFile,FileName);
  4058.         Dummy:=IOResult;
  4059.         if Dummy<>0 then begin
  4060.                 Dummy:=integer(Fault(Dummy,NIL,VariableString,364));
  4061.                 GiveError("XSearch 1.0 ["+ProjektName+"] - Save settings","Error while saving."+LF+"("+VariableString+")",win);
  4062.                 WriteXSearchPrefs:=FALSE;
  4063.                 goto ExitOut
  4064.         end;
  4065.         writeln (WriteFile,"XSEARCH PREFS");
  4066.         with RealPrefs do begin
  4067.                 writeln(WriteFile,long(FilerStart));
  4068.                 writeln(WriteFile,StartDir);
  4069.                 writeln(WriteFile,ProjektDir);
  4070.                 writeln(WriteFile,long(Recursion));
  4071.                 writeln(WriteFile,long(Sensitivity));
  4072.                 writeln(WriteFile,long(Coloured));
  4073.                 writeln(WriteFile,DateFormat);
  4074.                 writeln(WriteFile,long(Currency));
  4075.                 writeln(WriteFile,long(DirLength));
  4076.                 writeln(WriteFile,long(DirIFF));
  4077.                 writeln(WriteFile,long(DirFile));
  4078.                 writeln(WriteFile,long(DirOther))
  4079.         end;
  4080.         Close(WriteFile);
  4081.         Dummy:=IOResult;
  4082.         if Dummy<>0 then begin
  4083.                 Dummy:=integer(Fault(Dummy,NIL,VariableString,364));
  4084.                 GiveError("XSearch 1.0 ["+ProjektName+"] - Save settings","Error while saving."+LF+"("+VariableString+")",win);
  4085.                 WriteXSearchPrefs:=FALSE;
  4086.                 goto ExitOut
  4087.         end;
  4088.         WriteXSearchPrefs:=TRUE;
  4089.         ExitOut:
  4090. END;
  4091.  
  4092.  
  4093. PROCEDURE GetRidOfForPreferences(VAR win:p_window);
  4094. BEGIN
  4095.         win^.flags:=win^.flags or WFLG_RMBTRAP;
  4096.         win^.IDCMPFlags:=0;
  4097.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget^.nextgadget:=NIL
  4098. END;
  4099.  
  4100. PROCEDURE GetBackForPreferences(VAR win:p_window,GadgetCycle:p_gadget);
  4101. BEGIN
  4102.         win^.firstgadget^.nextgadget^.nextgadget^.nextgadget^.nextgadget:=GadgetCycle;
  4103.         win^.IDCMPFlags:=IDCMP_CLOSEWINDOW or IDCMP_VANILLAKEY or IDCMP_GADGETUP;
  4104.         win^.flags:=win^.flags xor WFLG_RMBTRAP;
  4105.         RefreshGadgets(win^.FirstGadget,win,NIL);
  4106.         GT_RefreshWindow(win,NIL);
  4107. END;
  4108.  
  4109. PROCEDURE PreferencesXSearch;
  4110. LABEL   BACK;
  4111. VAR     win     :                               p_window;
  4112.         CG      :                               p_gadget;
  4113.         CurrentGadget:                          p_gadget;
  4114.         NewGadgetFields:                        newgadget;
  4115.         GadgetStartWith:                        p_gadget;
  4116.         GadgetStartWhere:                       p_gadget;
  4117.         GadgetStartFiler:                       p_gadget;
  4118.         GadgetProjects:                         p_gadget;
  4119.         GadgetProjectFiler:                     p_gadget;
  4120.         GadgetRecursive:                        p_gadget;
  4121.         GadgetCase:                             p_gadget;
  4122.         GadgetColoured:                         p_gadget;
  4123.         GadgetDate:                             p_gadget;
  4124.         GadgetCurrency:                         p_gadget;
  4125.         GadgetDirLength:                        p_gadget;
  4126.         GadgetDirIFF:                           p_gadget;
  4127.         GadgetDirFile:                          p_gadget;
  4128.         GadgetDirother:                         p_gadget;
  4129.         GadgetSave:                             p_gadget;
  4130.         GadgetUse:                              p_gadget;
  4131.         GadgetCancel:                           p_gadget;
  4132.         ContentsStartWith:                      array[1..3] of str;
  4133.         ContentsCase:                           array[1..3] of str;
  4134.         ContentsDate:                           array[1..4] of str;
  4135.         ContentsSearch:                         array[1..3] of str;
  4136.         DidIt   :                               boolean;
  4137.         imsg    :                               p_intuimessage;
  4138.         MyEnd   :                               integer;
  4139.         MyXSP   :                               XSearchPrefs;
  4140.         ChangeASG:                              array [0..1] of Byte;
  4141.         SI      :                               p_StringInfo;
  4142.         TagsCHANGES:                            array[1..13] of TagItem;
  4143.         ZOM     :                               array[1..4] of word;
  4144. BEGIN
  4145.         GadgetStartWith:=CreateContext(^CG);
  4146.         ChangeASG[0]:=DI^.dri_Pens^[SHADOWPEN];
  4147.         ChangeASG[1]:=DI^.dri_Pens^[SHINEPEN];
  4148.         if ChangeASG[0]=ChangeASG[1] then
  4149.                 ChangeASG[0]:=DI^.dri_Pens^[FILLTEXTPEN];
  4150.  
  4151.         MyXSP:=UsedXSP;
  4152.         ContentsStartWith[1]:="Options";
  4153.         ContentsStartWith[2]:="Places";
  4154.         ContentsStartWith[3]:=NIL;
  4155.         TagsCHANGES[1].ti_Tag:=GTCY_Labels;
  4156.         TagsCHANGES[1].ti_Data:=ContentsStartWith;
  4157.         TagsCHANGES[2]:=TagItem(GT_Underscore,long("_"));
  4158.         TagsCHANGES[3]:=TagItem(GTCY_Active,long(MyXSP.FilerStart));
  4159.         TagsCHANGES[4].ti_Tag:=TAG_END;
  4160.         NewGadgetFields:=NewGadget(110,5,120,12,"_Start with",^tattr,1,
  4161.                 PLACETEXT_LEFT,VI,NIL);
  4162.         GadgetStartWith:=CreateGadgetA(CYCLE_KIND,CG,^NewGadgetFields,
  4163.                 ^TagsCHANGES);
  4164.  
  4165.         TagsCHANGES[1]:=TagItem(GTST_MaxChars,256);
  4166.         TagsCHANGES[2].ti_Tag:=GTST_String; TagsCHANGES[2].ti_Data:=MyXSP.StartDir;
  4167.         TagsCHANGES[3]:=TagItem(GT_Underscore,long("_"));
  4168.         TagsCHANGES[4].ti_Tag:=TAG_END;
  4169.         NewGadgetFields:=NewGadget(110,18,188,12,"in _dir.",^tattr,2,
  4170.                 PLACETEXT_LEFT,VI,NIL);
  4171.         GadgetStartWhere:=CreateGadgetA(STRING_KIND,GadgetStartWith,
  4172.                 ^NewGadgetFields,^TagsCHANGES);
  4173.  
  4174.         NewGadgetFields:=NewGadget(298,18,70,12,"Get...",^tattr,3,
  4175.                 PLACETEXT_IN,VI,NIL);
  4176.         GadgetStartFiler:=CreateGadgetA(BUTTON_KIND,GadgetStartWhere,
  4177.                 ^NewGadgetFields,NIL);
  4178.  
  4179.         TagsCHANGES[1]:=TagItem(GTST_MaxChars,256);
  4180.         TagsCHANGES[2].ti_Tag:=GTST_String; TagsCHANGES[2].ti_Data:=MyXSP.ProjektDir;
  4181.         TagsCHANGES[3]:=TagItem(GT_Underscore,long("_"));
  4182.         TagsCHANGES[4].ti_Tag:=TAG_END;
  4183.         NewGadgetFields:=NewGadget(110,31,188,12,"_Projects in",^tattr,4,
  4184.                 PLACETEXT_LEFT,VI,NIL);
  4185.         GadgetProjects:=CreateGadgetA(STRING_KIND,GadgetStartFiler,
  4186.                 ^NewGadgetFields,^TagsCHANGES);
  4187.  
  4188.         NewGadgetFields:=NewGadget(298,31,70,12,"Get...",^tattr,5,
  4189.                 PLACETEXT_IN,VI,NIL);
  4190.         GadgetProjectFiler:=CreateGadgetA(BUTTON_KIND,GadgetProjects,
  4191.                 ^NewGadgetFields,NIL);
  4192.  
  4193.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  4194.         TagsCHANGES[2]:=TagItem(GTCB_Checked,long(MyXSP.Recursion));
  4195.         TagsCHANGES[3].ti_Tag:=TAG_END;
  4196.         NewGadgetFields:=NewGadget(10,48,0,0,"Di_r. with Subdirs",^tattr,6,
  4197.                 PLACETEXT_RIGHT,VI,NIL);
  4198.         GadgetRecursive:=CreateGadgetA(CHECKBOX_KIND,GadgetProjectFiler,
  4199.                 ^NewGadgetFields,^TagsCHANGES);
  4200.  
  4201.         ContentsCase[1]:="G=k";
  4202.         ContentsCase[2]:="G÷k";
  4203.         ContentsCase[3]:=NIL;
  4204.         TagsCHANGES[1].ti_Tag:=GTCY_Labels;
  4205.         TagsCHANGES[1].ti_Data:=ContentsCase;
  4206.         TagsCHANGES[2]:=TagItem(GT_Underscore,long("_"));
  4207.         TagsCHANGES[3]:=TagItem(GTCY_Active,long(MyXSP.Sensitivity));
  4208.         TagsCHANGES[4].ti_Tag:=TAG_END;
  4209.         NewGadgetFields:=NewGadget(330,48,60,12,"Cas_e sens.",^tattr,7,
  4210.                 PLACETEXT_LEFT,VI,NIL);
  4211.         GadgetCase:=CreateGadgetA(CYCLE_KIND,GadgetRecursive,^NewGadgetFields,
  4212.                 ^TagsCHANGES);
  4213.  
  4214.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  4215.         TagsCHANGES[2]:=TagItem(GTCB_Checked,long(MyXSP.Coloured));
  4216.         TagsCHANGES[3].ti_Tag:=TAG_END;
  4217.         NewGadgetFields:=NewGadget(10,61,0,0,"Textgadg. _coloured",^tattr,8,
  4218.                 PLACETEXT_RIGHT,VI,NIL);
  4219.         GadgetColoured:=CreateGadgetA(CHECKBOX_KIND,GadgetCase,^NewGadgetFields,
  4220.                 ^TagsCHANGES);
  4221.  
  4222.         ContentsDate[1]:="DD.MM.YY";
  4223.         ContentsDate[2]:="DD-MM-YY";
  4224.         ContentsDate[3]:="MM-DD-YY";
  4225.         ContentsDate[4]:=NIL;
  4226.         TagsCHANGES[1].ti_Tag:=GTCY_Labels;
  4227.         TagsCHANGES[1].ti_Data:=ContentsDate;
  4228.         TagsCHANGES[2]:=TagItem(GT_Underscore,long("_"));
  4229.         TagsCHANGES[3]:=TagItem(GTCY_Active,MyXSP.DateFormat);
  4230.         TagsCHANGES[4].ti_Tag:=TAG_END;
  4231.         NewGadgetFields:=NewGadget(280,61,110,12,"Da_te",^tattr,9,
  4232.                 PLACETEXT_LEFT,VI,NIL);
  4233.         GadgetDate:=CreateGadgetA(CYCLE_KIND,GadgetColoured,^NewGadgetFields,
  4234.                 ^TagsCHANGES);
  4235.  
  4236.         TagsCHANGES[1]:=TagItem(GT_Underscore,long("_"));
  4237.         TagsCHANGES[2]:=TagItem(GTCB_Checked,long(MyXSP.Currency));
  4238.         TagsCHANGES[3].ti_Tag:=TAG_END;
  4239.         NewGadgetFields:=NewGadget(10,74,0,0,"current D_ate when new values",^tattr,10,
  4240.                 PLACETEXT_RIGHT,VI,NIL);
  4241.         GadgetCurrency:=CreateGadgetA(CHECKBOX_KIND,GadgetDate,^NewGadgetFields,
  4242.                 ^TagsCHANGES);
  4243.  
  4244.         ContentsSearch[1]:="pass";
  4245.         ContentsSearch[2]:="exclude";
  4246.         ContentsSearch[3]:=NIL;
  4247.  
  4248.         TagsCHANGES[1].ti_Tag:=GTCY_Labels;
  4249.         TagsCHANGES[1].ti_Data:=ContentsSearch;
  4250.         TagsCHANGES[2]:=TagItem(GT_Underscore,long("_"));
  4251.         TagsCHANGES[3]:=TagItem(GTCY_Active,long(MyXSP.DirLength));
  4252.         TagsCHANGES[4].ti_Tag:=TAG_END;
  4253.         NewGadgetFields:=NewGadget(250,91,140,12,"Dir. at _length control",
  4254.                 ^tattr,11,PLACETEXT_LEFT,VI,NIL);
  4255.         GadgetDirLength:=CreateGadgetA(CYCLE_KIND,GadgetCurrency,^NewGadgetFields,
  4256.                 ^TagsCHANGES);
  4257.  
  4258.         TagsCHANGES[1].ti_Tag:=GTCY_Labels;
  4259.         TagsCHANGES[1].ti_Data:=ContentsSearch;
  4260.         TagsCHANGES[2]:=TagItem(GT_Underscore,long("_"));
  4261.         TagsCHANGES[3]:=TagItem(GTCY_Active,long(MyXSP.DirIFF));
  4262.         TagsCHANGES[4].ti_Tag:=TAG_END;
  4263.         NewGadgetFields:=NewGadget(250,104,140,12,"_IFF control",
  4264.                 ^tattr,12,PLACETEXT_LEFT,VI,NIL);
  4265.         GadgetDirIFF:=CreateGadgetA(CYCLE_KIND,GadgetDirLength,^NewGadgetFields,
  4266.                 ^TagsCHANGES);
  4267.  
  4268.         TagsCHANGES[1].ti_Tag:=GTCY_Labels;
  4269.         TagsCHANGES[1].ti_Data:=ContentsSearch;
  4270.         TagsCHANGES[2]:=TagItem(GT_Underscore,long("_"));
  4271.         TagsCHANGES[3]:=TagItem(GTCY_Active,long(MyXSP.DirFile));
  4272.         TagsCHANGES[4].ti_Tag:=TAG_END;
  4273.         NewGadgetFields:=NewGadget(250,117,140,12,"_file-internal search",
  4274.                 ^tattr,13,PLACETEXT_LEFT,VI,NIL);
  4275.         GadgetDirFile:=CreateGadgetA(CYCLE_KIND,GadgetDirIFF,^NewGadgetFields,
  4276.                 ^TagsCHANGES);
  4277.  
  4278.         TagsCHANGES[1].ti_Tag:=GTCY_Labels;
  4279.         TagsCHANGES[1].ti_Data:=ContentsSearch;
  4280.         TagsCHANGES[2]:=TagItem(GT_Underscore,long("_"));
  4281.         TagsCHANGES[3]:=TagItem(GTCY_Active,long(MyXSP.DirOther));
  4282.         TagsCHANGES[4].ti_Tag:=TAG_END;
  4283.         NewGadgetFields:=NewGadget(250,130,140,12,"_other files at IFF",
  4284.                 ^tattr,14,PLACETEXT_LEFT,VI,NIL);
  4285.         GadgetDirother:=CreateGadgetA(CYCLE_KIND,GadgetDirFile,^NewGadgetFields,
  4286.                 ^TagsCHANGES);
  4287.  
  4288.         NewGadgetFields:=NewGadget(10,150,80,12,"Save",^tattr,15,
  4289.                 PLACETEXT_IN,VI,NIL);
  4290.         GadgetSave:=CreateGadgetA(BUTTON_KIND,GadgetDirother,^NewGadgetFields,
  4291.                 NIL);
  4292.  
  4293.         NewGadgetFields:=NewGadget(160,150,80,12,"Use",^tattr,16,
  4294.                 PLACETEXT_IN,VI,NIL);
  4295.         GadgetUse:=CreateGadgetA(BUTTON_KIND,GadgetSave,^NewGadgetFields,NIL);
  4296.  
  4297.         NewGadgetFields:=NewGadget(310,150,80,12,"Cancel",^tattr,17,
  4298.                 PLACETEXT_IN,VI,NIL);
  4299.         GadgetCancel:=CreateGadgetA(BUTTON_KIND,GadgetUse,^NewGadgetFields,NIL);
  4300.  
  4301.         if (ChangeASG[0]<>ChangeASG[1]) and (UsedXSP.Coloured=TRUE) then begin
  4302.                 SI:=GadgetStartWhere^.SpecialInfo;
  4303.                 SI^.Extension^.ActivePens:=ChangeASG;
  4304.                 SI:=GadgetProjects^.SpecialInfo;
  4305.                 SI^.Extension^.ActivePens:=ChangeASG;
  4306.         end;
  4307.  
  4308.         ZOM[1]:=100;
  4309.         ZOM[2]:=60;
  4310.         ZOM[3]:=350;
  4311.         ZOM[4]:=scr^.font^.ta_Ysize+6;
  4312.         TagsCHANGES[1]:=TagItem(WA_Top,60);
  4313.         TagsCHANGES[2]:=TagItem(WA_Left,100);
  4314.         TagsCHANGES[3]:=TagItem(WA_InnerHeight,167);
  4315.         TagsCHANGES[4]:=TagItem(WA_InnerWidth,400);
  4316.         TagsCHANGES[5].ti_Tag:=WA_Title;
  4317.         TagsCHANGES[5].ti_Data:="XSearch 1.0 - Preferences";
  4318.         TagsCHANGES[6]:=TagItem(WA_Flags,WFLG_CLOSEGADGET OR WFLG_GIMMEZEROZERO OR
  4319.                 WFLG_RMBTRAP OR WFLG_ACTIVATE OR WFLG_DRAGBAR OR WFLG_SMART_REFRESH OR
  4320.                 WFLG_DEPTHGADGET or WFLG_HASZOOM);
  4321.         TagsCHANGES[7]:=TagItem(WA_IDCMP,IDCMP_CLOSEWINDOW or IDCMP_GADGETUP or
  4322.                 IDCMP_VANILLAKEY);
  4323.         TagsCHANGES[8]:=TagItem(WA_CustomScreen,long(scr));
  4324.         TagsCHANGES[9].ti_Tag:=WA_Gadgets;
  4325.         TagsCHANGES[9].ti_Data:=CG^;
  4326.         TagsCHANGES[10]:=TagItem(WA_MouseQueue,0);
  4327.         TagsCHANGES[11]:=TagItem(WA_RptQueue,0);
  4328.         TagsCHANGES[12].ti_Tag:=WA_Zoom;
  4329.         TagsCHANGES[12].ti_Data:=ZOM;
  4330.         TagsCHANGES[13].ti_Tag:=TAG_END;
  4331.         win:=OpenWindowTagList(NIL,^TagsCHANGES);
  4332.  
  4333.         GT_RefreshWindow(win,NIL);
  4334.  
  4335.         BACK:
  4336.         MyEnd:=-1;
  4337.  
  4338.         REPEAT
  4339.                 imsg:=Wait_Port(win^.UserPort);
  4340.                 imsg:=GT_GetIMsg(win^.userport);
  4341.                 GT_ReplyIMsg(imsg);
  4342.                 case imsg^.class of
  4343.                         IDCMP_CLOSEWINDOW:
  4344.                                 MyEnd:=0
  4345.                         IDCMP_VANILLAKEY: begin
  4346.                                 if (imsg^.code=68) or (imsg^.code=80) then begin
  4347.                                         if imsg^.code=86 then SI:=GadgetStartWhere^.SpecialInfo else SI:=GadgetProjects^.SpecialInfo;
  4348.                                         ProjektDir:=SI^.Buffer;
  4349.                                         WaitPointer(win);
  4350.                                         GetRidOfForPreferences(win);
  4351.                                         DidIt:=FileProjekt(5,win);
  4352.                                         GetBackForPreferences(win,CG);
  4353.                                         NormalPointer(win);
  4354.                                         if DidIt=FALSE then begin RestoreProjektNameDir; goto BACK end;
  4355.                                         VariableStr:=ProjektDir;
  4356.                                         TagsCHANGES[1]:=TagItem(GTST_String,long(VariableStr));
  4357.                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  4358.                                         if imsg^.code=86 then GT_SetGadgetAttrsA(GadgetStartWhere,win,NIL,^TagsCHANGES) else GT_SetGadgetAttrsA(GadgetProjects,win,NIL,^TagsCHANGES);
  4359.                                         RestoreProjektNameDir;
  4360.                                         goto BACK
  4361.                                 end;
  4362.                                 if imsg^.code=84 then begin
  4363.                                         case MyXSP.DateFormat of
  4364.                                                 0:      MyXSP.DateFormat:=2
  4365.                                                 1:      MyXSP.DateFormat:=0
  4366.                                                 2:      MyXSP.DateFormat:=1
  4367.                                         end;
  4368.                                         TagsCHANGES[1]:=TagItem(GTCY_Active,MyXSP.DateFormat);
  4369.                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  4370.                                         GT_SetGadgetAttrsA(GadgetDate,win,NIL,^TagsCHANGES);
  4371.                                         goto BACK
  4372.                                 end;
  4373.                                 if imsg^.code>96 then imsg^.code:=imsg^.code-32;
  4374.                                 case imsg^.code of
  4375.                                         13:     MyEnd:=1
  4376.                                         27:     MyEnd:=0
  4377.                                         32:     MyEnd:=2
  4378.                                         83:     begin
  4379.                                                 MyXSP.FilerStart:=NOT(MyXSP.FilerStart);
  4380.                                                 TagsCHANGES[1]:=TagItem(GTCY_Active,long(MyXSP.FilerStart));
  4381.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  4382.                                                 GT_SetGadgetAttrsA(GadgetStartWith,win,NIL,^TagsCHANGES);
  4383.                                         end
  4384.                                         82:     begin
  4385.                                                 MyXSP.Recursion:=NOT(MyXSP.Recursion);
  4386.                                                 TagsCHANGES[1]:=TagItem(GTCB_Checked,long(MyXSP.Recursion));
  4387.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  4388.                                                 GT_SetGadgetAttrsA(GadgetRecursive,win,NIL,^TagsCHANGES);
  4389.                                         end
  4390.                                         69:     begin
  4391.                                                 MyXSP.Sensitivity:=NOT(MyXSP.Sensitivity);
  4392.                                                 TagsCHANGES[1]:=TagItem(GTCY_Active,long(MyXSP.Sensitivity));
  4393.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  4394.                                                 GT_SetGadgetAttrsA(GadgetCase,win,NIL,^TagsCHANGES);
  4395.                                         end
  4396.                                         67:     begin
  4397.                                                 MyXSP.Coloured:=NOT(MyXSP.Coloured);
  4398.                                                 TagsCHANGES[1]:=TagItem(GTCB_Checked,long(MyXSP.Coloured));
  4399.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  4400.                                                 GT_SetGadgetAttrsA(GadgetColoured,win,NIL,^TagsCHANGES);
  4401.                                         end
  4402.                                         65:     begin
  4403.                                                 MyXSP.Currency:=NOT(MyXSP.Currency);
  4404.                                                 TagsCHANGES[1]:=TagItem(GTCB_Checked,long(MyXSP.Currency));
  4405.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  4406.                                                 GT_SetGadgetAttrsA(GadgetCurrency,win,NIL,^TagsCHANGES);
  4407.                                         end
  4408.                                         76:     begin
  4409.                                                 MyXSP.DirLength:=NOT(MyXSP.DirLength);
  4410.                                                 TagsCHANGES[1]:=TagItem(GTCY_Active,long(MyXSP.DirLength));
  4411.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  4412.                                                 GT_SetGadgetAttrsA(GadgetDirLength,win,NIL,^TagsCHANGES);
  4413.                                         end
  4414.                                         73:     begin
  4415.                                                 MyXSP.DirIFF:=NOT(MyXSP.DirIFF);
  4416.                                                 TagsCHANGES[1]:=TagItem(GTCY_Active,long(MyXSP.DirIFF));
  4417.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  4418.                                                 GT_SetGadgetAttrsA(GadgetDirIFF,win,NIL,^TagsCHANGES);
  4419.                                         end
  4420.                                         70:     begin
  4421.                                                 MyXSP.DirFile:=NOT(MyXSP.DirFile);
  4422.                                                 TagsCHANGES[1]:=TagItem(GTCY_Active,long(MyXSP.DirFile));
  4423.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  4424.                                                 GT_SetGadgetAttrsA(GadgetDirFile,win,NIL,^TagsCHANGES);
  4425.                                         end
  4426.                                         79:     begin
  4427.                                                 MyXSP.DirOther:=NOT(MyXSP.DirOther);
  4428.                                                 TagsCHANGES[1]:=TagItem(GTCY_Active,long(MyXSP.DirOther));
  4429.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  4430.                                                 GT_SetGadgetAttrsA(GadgetDirOther,win,NIL,^TagsCHANGES);
  4431.                                         end
  4432.                                         84:     begin
  4433.                                                 case MyXSP.DateFormat of
  4434.                                                         0:      MyXSP.DateFormat:=1
  4435.                                                         1:      MyXSP.DateFormat:=2
  4436.                                                         2:      MyXSP.DateFormat:=0
  4437.                                                 end;
  4438.                                                 TagsCHANGES[1]:=TagItem(GTCY_Active,MyXSP.DateFormat);
  4439.                                                 TagsCHANGES[2].ti_Tag:=TAG_END;
  4440.                                                 GT_SetGadgetAttrsA(GadgetDate,win,NIL,^TagsCHANGES);
  4441.                                         end
  4442.                                         68:     DidIt:=activategadget(GadgetStartWhere,win,nil)
  4443.                                         80:     DidIt:=activategadget(GadgetProjects,win,nil)
  4444.                                         else
  4445.                                 end
  4446.                         end
  4447.                         IDCMP_GADGETUP: begin
  4448.                                 CurrentGadget:=imsg^.iaddress;
  4449.                                 if (CurrentGadget^.gadgetid=3) or (CurrentGadget^.gadgetid=5) then begin
  4450.                                         if CurrentGadget^.gadgetid=3 then SI:=GadgetStartWhere^.SpecialInfo else SI:=GadgetProjects^.SpecialInfo;
  4451.                                         ProjektDir:=SI^.Buffer;
  4452.                                         WaitPointer(win);
  4453.                                         GetRidOfForPreferences(win);
  4454.                                         DidIt:=FileProjekt(5,win);
  4455.                                         GetBackForPreferences(win,CG);
  4456.                                         NormalPointer(win);
  4457.                                         if DidIt=FALSE then begin RestoreProjektNameDir; goto BACK end;
  4458.                                         VariableStr:=ProjektDir;
  4459.                                         TagsCHANGES[1]:=TagItem(GTST_String,long(VariableStr));
  4460.                                         TagsCHANGES[2].ti_Tag:=TAG_END;
  4461.                                         if CurrentGadget^.gadgetid=3 then GT_SetGadgetAttrsA(GadgetStartWhere,win,NIL,^TagsCHANGES) else GT_SetGadgetAttrsA(GadgetProjects,win,NIL,^TagsCHANGES);
  4462.                                         RestoreProjektNameDir;
  4463.                                         goto BACK
  4464.                                 end;
  4465.                                 case CurrentGadget^.gadgetid of
  4466.                                         1:      MyXSP.FilerStart:=boolean(imsg^.code)
  4467.                                         6:      MyXSP.Recursion:=GadgetRecursive^.flags and GFLG_Selected<>0
  4468.                                         7:      MyXSP.Sensitivity:=boolean(imsg^.code)
  4469.                                         8:      MyXSP.Coloured:=GadgetColoured^.flags and GFLG_Selected<>0
  4470.                                         9:      MyXSP.DateFormat:=imsg^.code
  4471.                                         10:     MyXSP.Currency:=GadgetCurrency^.flags and GFLG_Selected<>0
  4472.                                         11:     MyXSP.DirLength:=boolean(imsg^.code)
  4473.                                         12:     MyXSP.DirIFF:=boolean(imsg^.code)
  4474.                                         13:     MyXSP.DirFile:=boolean(imsg^.code)
  4475.                                         14:     MyXSP.DirOther:=boolean(imsg^.code)
  4476.                                         15:     MyEnd:=2
  4477.                                         16:     MyEnd:=1
  4478.                                         17:     MyEnd:=0
  4479.                                         else
  4480.                                 end
  4481.                         end
  4482.                         else
  4483.                 end
  4484.         UNTIL MyEnd<>-1;
  4485.  
  4486.         SI:=GadgetStartWhere^.SpecialInfo;
  4487.         MyXSP.StartDir:=SI^.Buffer;
  4488.         SI:=GadgetProjects^.SpecialInfo;
  4489.         MyXSP.ProjektDir:=SI^.Buffer;
  4490.  
  4491.         if MyEnd=2 then
  4492.                 if WriteXSearchPrefs("ENVARC:XSearch.Config",MyXSP,win)=FALSE then goto BACK;
  4493.         if MyEnd<>0 then begin
  4494.                 ConvertDate(PCA.Date1,UsedXSP.DateFormat,MyXSP.DateFormat);
  4495.                 ConvertDate(PCA.Date2,UsedXSP.DateFormat,MyXSP.DateFormat);
  4496.                 UsedXSP:=MyXSP;
  4497.         end;
  4498.  
  4499.         CloseWindow(win);
  4500.         FreeGadgets(CG);
  4501. END;
  4502.  
  4503.  
  4504. BEGIN
  4505.         OpenLib(DosBase,"dos.library",36);
  4506.         OpenLib(SysBase,"exec.library",36);
  4507.         OpenLib(IntuitionBase,"intuition.library",36);
  4508.         OpenLib(GadToolsBase,"gadtools.library",36);
  4509.         OpenLib(GfxBase,"graphics.library",36);
  4510.         OpenLib(DiskFontBase,"diskfont.library",36);
  4511.         OpenLib(WorkbenchBase,"workbench.library",36);
  4512.         OpenLib(AslBase,"asl.library",36);
  4513.         OpenLib(UtilityBase,"utility.library",36);
  4514.         OpenLib(IFFParse,"iffparse.library",36);
  4515.         DB:=DosBase;
  4516.  
  4517.         tattr:=TextAttr("topaz.font",8,0,0);
  4518.         tfont:=OpenFont(^tattr);
  4519.         scr:=LockPubScreen(NIL);
  4520.         UnLockPubScreen(NIL,scr);
  4521.         VI:=GetVisualInfoA(scr,NIL);
  4522.         DI:=GetScreenDrawInfo(scr);
  4523.         FreeScreenDrawInfo(scr,DI);
  4524.         New(SearchList);
  4525.         InitList(SearchList);
  4526.         New(TextList);
  4527.         InitList(TextList);
  4528.         VariableString:="";
  4529.         VariableStr:=VariableString;
  4530.  
  4531.         saved:=TRUE;
  4532.         start:=TRUE;
  4533.         IDidTheMarking:=FALSE;
  4534.         MyPattern:="~(#?.info)";
  4535.  
  4536.         LockBack:=Lock("RAM:",SHARED_LOCK);
  4537.         if IOErr<>0 then
  4538.                 LockFirst:=0
  4539.         else begin
  4540.                 LockFirst:=CurrentDir(LockBack);
  4541.                 UnLock(LockBack);
  4542.                 LockBack:=CurrentDir(LockFirst)
  4543.         end;
  4544.  
  4545.         BeginString:="";
  4546.         if ReadXSearchPrefs("ENVARC:XSearch.Config",UsedXSP)=FALSE then begin
  4547.                 BeginString:="Error while loading settings.";
  4548.                 UsedXSP:=XSearchPrefs(FALSE,"","RAM:",TRUE,FALSE,FALSE,1,TRUE,TRUE,TRUE,TRUE,FALSE);
  4549.         end;
  4550.  
  4551.         MyLock:=Lock(UsedXSP.StartDir,SHARED_LOCK);
  4552.         CS:="";
  4553.         if IOErr<>0 then CurrentDirectory:="" else begin CurrentDirectory:=UsedXSP.StartDir; Unlock(MyLock) end;
  4554.  
  4555.         MyLock:=Lock(UsedXSP.ProjektDir,SHARED_LOCK);
  4556.         if IOErr<>0 then ProjektDir:="RAM:" else begin ProjektDir:=UsedXSP.ProjektDir; Unlock(MyLock) end;
  4557.  
  4558.         if NameProjekt(TRUE)=FALSE then begin
  4559.                 ProjektName:="OhneNamen";
  4560.                 ProjektDir:="RAM:";
  4561.                 Projekt:="RAM:OhneNamen";
  4562.                 ProjektXSearch:="XSearch 1.0 - [OhneNamen]"
  4563.         end;
  4564.  
  4565.         EndExit:=0;
  4566.         if ReadPrefs("ENVARC:XSearch.Std",PrefsStandard,NIL,FALSE,SearchList,FALSE)=FALSE then begin
  4567.                 if BeginString<>"" then BeginString:="Error while loading settings/values." else BeginString:="Error while loading Standard values.";
  4568.                 PrefsStandard:=Prefs(0,0,"********","","","","",1,"#?","#?","","#?",1,0,0);
  4569.                 EndExit:=1
  4570.         end;
  4571.         if (EndExit=1) or (UsedXSP.Currency=TRUE) then begin
  4572.                 VariableString:=ConvertCurrentDateTime(NIL,FALSE); VariableStr:=VariableString;
  4573.                 VariableString:=AlienizeTimeDate(VariableStr,FALSE);
  4574.                 PrefsStandard.Date1:=VariableString; PrefsStandard.Date2:=VariableString;
  4575.                 VariableString:=ConvertCurrentDateTime(NIL,TRUE); VariableStr:=VariableString;
  4576.                 VariableString:=AlienizeTimeDate(VariableStr,TRUE);
  4577.                 PrefsStandard.Time1:=VariableString; PrefsStandard.Time2:=VariableString;
  4578.                 EndExit:=0
  4579.         end;
  4580.         PCA:=PrefsStandard;
  4581.  
  4582.         CurrentMode:=UsedXSP.FilerStart;
  4583.  
  4584.         repeat
  4585.                 case CurrentMode of
  4586.                         CM_OPTIONS: Options
  4587.                         CM_FILER: Filer
  4588.                 end;
  4589.                 if EndExit=2 then CurrentMode:=NOT(CurrentMode);
  4590.                 if EndExit=1 then begin
  4591.                         OptimizePrefs;
  4592.                         InSearch:=TRUE; LookUp; InSearch:=FALSE
  4593.                 end
  4594.         until EndExit=0;
  4595.  
  4596.         SearchNodeV:=p_SearchNode(SearchList^.lh_Head);
  4597.         WHILE p_SearchNode(SearchNodeV^.sen_Node.ln_Succ)<>NIL DO BEGIN
  4598.                 SearchNodeBack:=p_SearchNode(SearchNodeV^.sen_Node.ln_Succ);
  4599.                 Remove(p_Node(^SearchNodeV^.sen_Node));
  4600.                 dispose(SearchNodeV);
  4601.                 SearchNodeV:=SearchNodeBack;
  4602.         END;
  4603.         TextNode:=p_StringNode(TextList^.lh_Head);
  4604.         WHILE p_StringNode(TextNode^.stn_Node.ln_Succ)<>NIL DO BEGIN
  4605.                 TextNodeBack:=p_StringNode(TextNode^.stn_Node.ln_Succ);
  4606.                 Remove(p_Node(^TextNode^.stn_Node));
  4607.                 dispose(TextNode);
  4608.                 TextNode:=TextNodeBack;
  4609.         END;
  4610.         dispose(TextList);
  4611.         LockBack:=CurrentDir(LockFirst);
  4612.         dispose(SearchList);
  4613.         FreeVisualInfo(VI);
  4614.         if LockFirst<>0 then LockBack:=CurrentDir(LockFirst);
  4615. END.
  4616.  
  4617.  
  4618.  
  4619.  
  4620.  
  4621.